为什么我的最后一条规则[L]无法在apache中运行?

时间:2009-11-23 17:35:41

标签: apache zend-framework mod-rewrite

后台,我正在运行Zend Framework应用程序。试图尽可能地挤出最大的性能。所以我试图将规则从.htaccess中移除到Zend Framework书籍作者的每篇博文中的字母:http://www.armando.ws/2009/03/how-to-run-zend-framework-with-no-htaccess-file/

所以基本上,在httpd.conf中,我在conf / extra / httpd-zf.conf中添加了一个include,它包含了我的.htaccess文件中的相同内容并且工作正常。

这是在httpd-zf.conf中无法正常运行的相关代码:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L,NC]
RewriteRule ^.*$ /index.php [NC,L]

控制器工作正常。可以看到index.php。但静态文件不起作用。它错误地说它不是一个有效的控制器,所以显然它是通过index.php运行的。

这几乎就像在跑步后一样:

RewriteRule ^.*$ - [L,NC]

它一直在继续。事实上,删除这一行:

RewriteRule ^.*$ /index.php [NC,L]

修复了静态文件,但当然会破坏它的其余部分。

所以基本上LAST规则似乎不起作用。

任何关于让它正常工作的想法?

谢谢。

更新

打开日志记录后(我不得不将其升级到Loglevel 9),结果发现即使正在删除     RewriteRule ^。* $ /index.php [NC,L] 允许静态文件解析,它不匹配条件RewriteCond%{REQUEST_FILENAME} -s无论什么......它只是“通过”无论如何,它允许文件显示...

很明显,.htaccess在正确的路径上的事实使它在httpd-zf.conf路径错误的地方工作....必须有一个地方,我可以告诉httpd-zf.conf是什么我的docroot路径是......

2 个答案:

答案 0 :(得分:2)

我不相信这些条件与第二条规则有关。我建议启用重写调试:RewriteLog "/myfolder/mylogfile.log"RewriteLogLevel 3

尝试:

RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC,L]

答案 1 :(得分:0)

找到了解决方案!!

以下是有效的代码:

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -s [OR]
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -l [OR]
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -d

这个wiki帖子解释了为什么它不起作用: http://wiki.apache.org/httpd/RewriteContext