知识问答

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地址。