13个实用的Apache Rewrite重写规则
13个实用的Apache Rewrite重写规则攻略
Apache Rewrite模块是一个强大的工具,用于在Apache服务器上重写URL。它可以帮助我们实现URL重定向、URL重写和URL美化等功能。下面是13个实用的Apache Rewrite重写规则的详细讲解,其中包含两个示例说明。
1. 重定向到www域名
有时候我们希望将非www域名重定向到www域名,可以使用以下规则:
RewriteEngine OnRewriteCond %{HTTP_HOST} !^www\\. [NC]RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]这个规则会将所有非www域名的请求重定向到对应的www域名。
2. 重定向到HTTPS
如果我们希望将所有HTTP请求重定向到HTTPS,可以使用以下规则:
RewriteEngine OnRewriteCond %{HTTPS} offRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]这个规则会将所有非HTTPS的请求重定向到对应的HTTPS地址。
3. 隐藏文件扩展名
有时候我们希望隐藏URL中的文件扩展名,可以使用以下规则:
RewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME}\\.php -fRewriteRule ^([^\\.]+)/?$ $1.php [L]这个规则会将URL中的example.com/page重写为example.com/page.php,隐藏了文件扩展名。
4. 美化URL参数
如果我们希望将URL中的参数进行美化,可以使用以下规则:
RewriteEngine OnRewriteRule ^product/([0-9]+)/?$ product.php?id=$1 [L]这个规则会将URL中的example.com/product/123重写为example.com/product.php?id=123,使URL更加友好。
5. 重写子目录
如果我们希望将子目录中的请求重写到指定的文件或目录,可以使用以下规则:
RewriteEngine OnRewriteRule ^subdir/(.*)$ /newdir/$1 [L]这个规则会将URL中的example.com/subdir/file重写为example.com/newdir/file,将请求重定向到新的目录。
6. 阻止目录列表
如果我们希望禁止Apache服务器显示目录列表,可以使用以下规则:
Options -Indexes这个规则会禁止Apache服务器显示目录列表,当访问一个没有默认文件的目录时,会返回403 Forbidden错误。
7. 重写域名
如果我们希望将一个域名重写到另一个域名,可以使用以下规则:
RewriteEngine OnRewriteCond %{HTTP_HOST} ^old\\.com$ [NC]RewriteRule ^(.*)$ http://new.com/$1 [L,R=301]这个规则会将所有来自old.com域名的请求重定向到new.com域名。
8. 重写特定文件类型
如果我们希望将特定文件类型的请求重写到另一个文件,可以使用以下规则:
RewriteEngine OnRewriteRule ^(.+)\\.html$ $1.php [L]这个规则会将所有以.html结尾的请求重写为对应的.php文件。
9. 重写URL参数
如果我们希望将URL参数进行重写,可以使用以下规则:
RewriteEngine OnRewriteCond %{QUERY_STRING} ^id=([0-9]+)$RewriteRule ^page\\.php$ /newpage.php?id=%1 [L]这个规则会将URL中的example.com/page.php?id=123重写为example.com/newpage.php?id=123,重写了URL参数。
10. 重写URL路径
如果我们希望将URL路径进行重写,可以使用以下规则:
RewriteEngine OnRewriteRule ^oldpath/(.*)$ newpath/$1 [L]这个规则会将URL中的example.com/oldpath/file重写为example.com/newpath/file,重写了URL路径。
11. 重写URL查询参数
如果我们希望将URL查询参数进行重写,可以使用以下规则:
RewriteEngine OnRewriteCond %{QUERY_STRING} ^id=([0-9]+)$RewriteRule ^page\\.php$ /page.php?newid=%1 [L]这个规则会将URL中的example.com/page.php?id=123重写为example.com/page.php?newid=123,重写了URL查询参数。
12. 重写URL主机名
如果我们希望将URL中的主机名进行重写,可以使用以下规则:
RewriteEngine OnRewriteCond %{HTTP_HOST} ^old\\.com$ [NC]RewriteRule ^(.*)$ http://new.com/$1 [L,R=301]这个规则会将所有来自old.com域名的请求重定向到new.com域名。
13. 重写URL协议
如果我们希望将URL中的协议进行重写,可以使用以下规则:
RewriteEngine OnRewriteCond %{HTTPS} offRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]这个规则会将所有非HTTPS的请求重定向到对应的HTTPS地址。