当没有vhost
文件时,.htaccess
文件中的以下指令正常工作。但是,当我介绍一个它停止工作。当vhost
重写为htaccess
时,如何让not-matched
重写执行?
来自vhost.conf
:
# Skip everything except html and json
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_URI} !\.(html|json)$
RewriteRule .* - [L]
# If html exists (is cached)
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
# Otherwise pass it on the index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
来自/test/.htaccess
:
RewriteEngine on
RewriteCond %{REQUEST_URI} old_directory/.*$
RewriteRule (.*)$ old_missing.phtml [PT]
/test/hello.json
的请求......
...没有.htaccess
:被路由到index.php
并返回正确的json。
...与.htaccess
:返回404 Not Found
/text/old_hello.phtml
的请求......
...没有.htaccess
:返回404 Not Found
...与.htaccess
:返回old_missing.phtml
此外,我将我的重写日志保留了下来,看起来它正在按照.htaccess
规则(trip per-dir prefix
,applying pattern
,RewriteCond => not-matched
和{{1然后它就会停止。
对于那些倾向于问“你为什么要这样做?”的人。有两个原因:1)我收到了付款; 2)我们正在将一些ajax pass through
请求迁移到新的ajax .phtml
系统,因此如果用户从中请求文件,我们需要传回一条消息.json
首先告知他们更改。感谢。
答案 0 :(得分:1)
您需要将以下行添加到您使用重写规则的所有.htaccess文件中:
RewriteOptions inherit
Apache文档:http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions