我有两个/etc/apache2/sites-available/foo
文件/etc/apache2/sites-available/foo_maintenance
我使用的重写规则/etc/apache2/sites-available/foo
是
<Directory /var/www/public_html>
Options +FollowSymlinks
RewriteOptions inherit
RewriteEngine on
#
RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]
</Directory>
以便全部mysite.com/*
重定向到www.mysite.com
在我关闭我的网站进行维护后,如果用户导航到网站的子页面(如 mysite.com/subdir/something.php),我希望将他们重定向到 www.mysite.com,以便显示维护页面的 index.html。
将所有流量从任何子页面重定向到的重写规则是什么www.mysite.com
?
答案1
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]
RewriteRules 有三个部分。要匹配的模式、替换和标志。本例中的模式是^(.*)$
。^
表示行首,$
表示行尾。.
表示任意字符,*
后面的表示可以出现任意次。现在,圆括号定义了一个捕获组,它基本上存储了括号之间出现的所有内容。然后您可以在替换中使用这些捕获组。因此,如果请求是/subdir/something.php
,则第一个捕获组将包含“/subdir/something.php”。
本例中的替换为http://www.mysite.com/$1
, 表示$1
匹配模式中的第一个捕获组。目标 URL 由填写这些捕获组组成,在本例中将产生http://www.mysite.com/subdir/something.php
。
因此,如果您想始终将用户发送到根目录,www.mysite.com
而不管他们请求的路径是什么,您只需不在替换中填写路径,即删除该$1
部分。您的最终规则将如下所示:
RewriteRule ^(.*)$ http://www.mysite.com/ [R=301,L]
答案2
您可以采取类似这样的做法:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
RewriteCond %{REQUEST_URI} !^/$ [NC]
RewriteRule ^.*$ http://www.mysite.com/ [L]
- 第 1 行在此上下文中启用重写引擎。
- 第 2 行检查请求是否发送到我的站点。
- 第 3 行检查请求的 URI 是否尚未/。
- 第 4 行将所有地址重定向至http://www.mysite.com/。