![](/img/trans.png)
[英]Apache Mod_Rewrite: include dynamic rewrites with date based variable
[英]mod_rewrite: Prevent multiple rewrites using an environment variable
我目前正在为* .php返回404错误,并使用以下命令将所有请求内部重定向到一个PHP文件(如果存在):
RewriteCond %{REQUEST_URI} /(?!index$)
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ /$1.php [QSA,L,E=norewrite:1]
RewriteCond %{ENV:norewrite} !1
RewriteCond %{REQUEST_URI} \.php$
RewriteRule ^(.+)$ - [R=404]
这很好。 但是,我希望能够从index.php.src之类的文件提供PHP(或其他)源(具有适当的扩展名),同时让index.php.src如果直接访问也返回404。
RewriteCond %{REQUEST_URI} /(?!index$)
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ /$1.php [QSA,L,E=norewrite:1]
RewriteCond %{ENV:norewrite} !1
RewriteCond %{REQUEST_FILENAME}\.src -f
RewriteRule ^(.+)$ /$1.src [L,E=norewrite:1]
RewriteCond %{ENV:norewrite} !1
RewriteCond %{REQUEST_URI} \.php$ [OR]
RewriteCond %{REQUEST_URI} \.src$
RewriteRule ^(.+)$ - [R=404]
这似乎不起作用。 它在内部重定向到index.php,然后重定向到index.php.src,然后是404s。
有趣的是,在第一个示例中,环境变量DOES阻止了第二个规则集的执行,并且页面按预期加载。 当我添加第二个示例中的中间规则集时,环境变量似乎不再起作用。 如果我从第二个示例中删除了第二个规则集,而将其他行保留在最后一个规则集中,则它的行为就与第一个示例一样(除非请求例如index.php.src返回404,这就是我想要的) 。
由于各种原因,为此目的而使用查询字符串是不可接受的,它必须是环境变量。
我该如何进行这项工作? 我究竟做错了什么?
编辑:以防我解释得不好(我很确定我做到了)...
问题似乎出在第二节,但我无法弄清楚出了什么问题...
这是我所做的工作:
RewriteCond %{IS_SUBREQ} false
RewriteCond %{REQUEST_URI} /(?!index$)
RewriteCond %{ENV:REDIRECT_STOP} !1
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ /$1.php [QSA,L,E=STOP:1]
RewriteCond %{IS_SUBREQ} false
RewriteCond %{ENV:REDIRECT_STOP} !1
RewriteCond %{REQUEST_FILENAME}\.src -f
RewriteRule ^(.+)$ /$1.src [L,E=STOP:1]
RewriteCond %{IS_SUBREQ} false
RewriteCond %{ENV:REDIRECT_STOP} !1
RewriteCond %{REQUEST_URI} \.php$ [OR]
RewriteCond %{REQUEST_URI} \.src$
RewriteRule ^(.+)$ - [R=404]
您会注意到我添加了%{IS_SUBREQ}位,这有助于解决导致它返回404的首页重新分配问题。那时,查询字符串方法变得可以接受,并且确实可以使用该方法,但是'不是那种jsut的类型,我知道这是可以做到的,而我会做的(我做到了!)
除了将变量名从'norewrite'更改为'STOP'(为清楚起见)外,我还了解到在发生内部重定向时,由mod_rewrite设置的环境变量以'REDIRECT_'为前缀。 这就是为什么设置'norewrite'('STOP')的值,然后检查相同的变量不起作用的原因。 当我在检查行中将“ REDIRECT_”附加到它之后,它现在的行为与预期的一样。
这正是我想要的! 希望这也会对其他人有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.