可能这个问题已经得到解答,但经过数小时的搜索后我没有找到任何答案。
我需要将网站置于"维护模式"并重定向/重写所有对site_down.html的请求,但同时如果我输入文件在子文件夹中的地址,我需要该网站可用。
例如:
如果我输入http://example.com/login.php,我需要显示site_down.html。 但如果我指定http://example.com/test/login.php,我需要显示真实的login.php。
我需要通过重写来完成,因此将所有内容复制到另一个目录并不是一个解决方案。
我尝试了几十种组合,但我仍然无法实现我的需求
这是我的.htaccess文件的一个版本():
DirectoryIndex site_down.html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^test\/(.*)$ $1 [S=1]
RewriteRule ^(.*\.php)$ site_down.html
RewriteRule .* - [L]
</IfModule>
此代码应使用&#34; test / *&#34;重写所有请求。到&#34;父文件夹&#34;并跳过下一个重写规则,然后在RewriteRule .* - [L]
终止重写。如果没有&#34; test /&#34;在url中 - 所有请求都应该重写为site_down.html
我做错了什么?
你能建议任何有效的解决方案吗?
谢谢。
答案 0 :(得分:1)
基本上,您正在搜索2条规则。一条规则会将虚拟子目录转换为工作文件。另一个规则将url转换为工作文件到splash页面。我们必须确保如果第一条规则匹配,则第二条规则不匹配。我们可以通过确保" /test/"
(包括那个前导空格)不在THE_REQUEST
(或客户端发送到服务器请求页面的字符串; {{1 }})。 THE_REQUEST在重写时不会改变,这使得它非常适合。像你一样跳过规则通常没有你期望的效果,因为mod_rewrite通过.htaccess进行多次传递,直到结果url不再更改,或者它达到限制并抛出错误。它第一次跳过规则,但第二次不会这样做。
GET /test/mypage.php?apes=bananas HTTP/1.1