目录级别.htaccess mod_rewrite停止vhost重写

时间:2011-08-03 00:50:27

标签: .htaccess mod-rewrite

当没有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 prefixapplying patternRewriteCond => not-matched和{{1然后它就会停止。

对于那些倾向于问“你为什么要这样做?”的人。有两个原因:1)我收到了付款; 2)我们正在将一些ajax pass through请求迁移到新的ajax .phtml系统,因此如果用户从中请求文件,我们需要传回一条消息.json首先告知他们更改。感谢。

1 个答案:

答案 0 :(得分:1)

您需要将以下行添加到您使用重写规则的所有.htaccess文件中:

RewriteOptions inherit

Apache文档:http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions