Apache mod_rewrite 及示例
什么是 mod_rewrite?
HostGator 使用 Apache 这款开源 HTTP 服务器软件来托管您的网站。Apache 可以通过模块进行自定义,mod_rewrite 模块可供您自行使用。mod_rewrite 可以将一个 URL 重定向到另一个 URL,重写请求的 URL,限制对您网站的访问等等。
重写规则可以通过将其放置在您的 .htaccess 文件中来调用。以下是一些示例,展示了如何使用这些规则来自定义您的托管体验。
注意: 请记住,我们不提供代码支持,也不保证您的代码能够正常运行。有些代码需要与其他代码配合使用,有些则不需要。
mod_rewrite 示例
以下是一些规则示例,允许您执行以下操作:
设置默认首页
#指定默认首页(索引页)
DirectoryIndex home.html
指定 IP 访问
#只允许指定 IP 访问您的网站
deny from all
allow from 64.95.219.140
allow from 210.23.45.67
重定向所有网站页面
# 将 olddomain.com 的所有页面重定向到 newdomain.com
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.olddomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^olddomain.com$
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]
阻止访问子文件夹
# 阻止访问子文件夹。此规则放在主域名的 .htaccess 中
RewriteCond %{HTTP_HOST} ^primary\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.primary\.com$
RewriteRule ^addon\.com\/?(.*)$ "http\:\/\/www\.addon\.com\/$1" [R=301,L]
阻止访问子域名
# 阻止访问子域名。
# 此规则放在主域名的 .htaccess 中
RewriteCond %{HTTP_HOST} ^subname\.primary\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.subname\.primary\.com$
RewriteRule ^(.*)$ "http\:\/\/www\.addon\.com\/$1" [R=301,L]
强制使用无 www 域名访问
# 域名中永远不使用 www
# 将 'example.com' 替换为您的域名
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?example\.com)$ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]
强制使用 www 域名访问
# 域名中始终使用 www
# 将 'example.com' 替换为您的域名
RewriteEngine on
RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .? http://www.%1example.com%{REQUEST_URI} [R=301,L]
设置默认主文件夹
# 设置默认主目录(始终加载此子文件夹)
# 将 'folder' 替换为您的子文件夹名称
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ /folder/ [R=301,L]
</IfModule>
重定向文件夹访问
# 重命名目录并强制访问新名称
# 将 'old' 替换为旧文件夹名称
# 将 'new' 替换为新文件夹名称
RewriteEngine on
RewriteRule ^/?old([a-z/.]*)$ /new$1 [R=301,L]
强制 HTTPS 访问
# 始终使用 https 进行安全连接
# 将 'www.example.com' 替换为您的域名
# (与您的 SSL 证书上的域名一致)
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
阻止来自多个来源网站的流量
# 阻止来自多个来源网站的流量
RewriteEngine on
Options +FollowSymLinks
RewriteCond %{HTTP_REFERER} badsite\.com [NC,OR]
RewriteCond %{HTTP_REFERER} badforum\.com [NC,OR]
RewriteCond %{HTTP_REFERER} badsearchengine\.com [NC]
RewriteRule .* - [F]
拒绝访问特定文件类型
# 不允许调用以下文件类型
RewriteEngine on
RewriteRule .*\.(jpg|jpeg|gif|png|bmp|exe|swf)$ - [F,NC]
移除 index 文件
Options +FollowSymLinks -MultiViews -indexes
RewriteEngine On
RewriteBase /
# 移除 index 文件
RewriteCond %{THE_REQUEST} /index(\.php)?[\s?/] [NC]
RewriteRule ^(.*?)index(/|$) /$1 [L,R=301,NC,NE]
移除 .php
Options +FollowSymLinks -MultiViews -indexes
RewriteEngine On
RewriteBase /
# 移除 .php;使用 THE_REQUEST 防止无限循环
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [L,R=301]
移除 index 文件和尾部斜杠
Options +FollowSymLinks -MultiViews -indexes
RewriteEngine On
RewriteBase /
# 移除 index 文件
RewriteRule (.*)/index$ $1/ [R=302]
# 如果不是目录,移除末尾斜杠
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301,L]
添加 .php 以访问文件,但不重定向
Options +FollowSymLinks -MultiViews -indexes
RewriteEngine On
RewriteBase /
# 添加 .php 以访问文件,但不重定向
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1.php [L]
.htaccess 相关的额外资源
以下文章仅供参考。请注意,HostGator 无法为以下信息提供直接支持。
- javascriptkit.com
- apache.org
- modrewrite.com
- mod rewrite lessons
- mod rewrite examples