我的网站根目录中有一个 .htaccess,需要捕获所有 .php 页面并将它们重定向到某个地方。
RewriteCond %{REQUEST_URI} !/notice.php$
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteRule $ /notice.php [R,L]
这个工作正常,但是当调用网站默认根目录时会失败(默认根目录是index.php)。
所以; https://www.website.com/index.php --> 成功重定向到notice.php 但 https://www.website.com/ 没有,因此显示的是 index.php 页面的内容。
我尝试过的事情:
RewriteCond %{REQUEST_URI} !/notice.php$
RewriteCond %{REQUEST_FILENAME} \.php$ [OR]
RewriteCond %{REQUEST_FILENAME} ^/$
RewriteRule $ /notice.php [R,L]
这行不通。
RewriteCond %{REQUEST_URI} !/notice.php$
RewriteCond %{REQUEST_FILENAME} \.php$ [OR]
RewriteCond %{REQUEST_FILENAME} ^.*$
RewriteRule $ /notice.php [R,L]
这也行不通。
当未指定根文件夹文件名时,如何设置 .htaccess 以捕获默认索引加载器?我无法使用
DirectoryIndex notice.php
,因为此重定向对时间敏感(仅适用于某些日期和时间)。
例如
RewriteCond %{TIME} >=20241130230000
RewriteCond %{REQUEST_URI} !/notice.php$
RewriteCond %{REQUEST_FILENAME} \.php$ [OR]
RewriteCond %{REQUEST_FILENAME} ^.$
RewriteRule $ /notice.php [R,L]
我一发布这个问题就找到了答案;
感谢 Stack Overflow 迫使我找到解决方案:
RewriteCond %{REQUEST_FILENAME} \.php$ [OR]
RewriteCond %{REQUEST_FILENAME} !-f
将条件设置为“如果不是文件”,这是“..../”请求的默认条件。
所以;
RewriteCond %{REQUEST_URI} !/notice.php$
RewriteCond %{REQUEST_FILENAME} \.php$ [OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule $ /notice.php [R,L]
有效!