我有两个文件/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/*redirect到www.mysite.com
当我把我的网站下载维护,如果用户导航到像mysite.com/subdir/something.php网站的子页面,我想redirect到www.mysite.com所以index.html维护页面将被显示。
什么是重写规则redirect所有stream量从任何子页面www.mysite.com ?
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]
RewriteRules有三个部分。 匹配模式,replace和标志。 这种情况下的模式是^(.*)$ 。 ^表示行的开始, $表示行的结尾。 的. 代表任何字符, *表示它可以发生任何次数。 现在,圆括号定义了一个捕获组,它基本上存储了在括号之间发生的所有事情。 这些捕获组随后可供您在replace中使用。 所以如果请求是/subdir/something.php ,那么第一个捕获组将包含“/subdir/something.php”。
这种情况下的replace是http://www.mysite.com/$1 $1表示匹配模式中的第一个捕获组。 目标URL是通过填充这些捕获组来形成的,在这种情况下,将产生http://www.mysite.com/subdir/something.php 。
因此,如果您想始终将用户发送到www.mysite.com的根目录,而不pipe他们请求的path如何,您只需要在replace中填写path即删除$1部分。 您的最终规则将如下所示:
RewriteRule ^(.*)$ http://www.mysite.com/ [R=301,L]
你可以沿着这个方向走:
RewriteEngine on RewriteCond %{HTTP_HOST} ^mysite\.com [NC] RewriteCond %{REQUEST_URI} !^/$ [NC] RewriteRule ^.*$ http://www.mysite.com/ [L]