我有两个两个文件/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
?
您可以按照以下方式进行操作:
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
部分。您的最终规则将如下所示: