【问题标题】:Why is my LAST rule [L] not working in apache?为什么我的最后一条规则 [L] 在 apache 中不起作用?
【发布时间】:2009-11-24 03:46:18
【问题描述】:

背景,我正在运行 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 添加一个包含,其中包含与我的 .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]

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

所以基本上最后一条规则似乎不起作用。

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

谢谢。

更新

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

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

【问题讨论】:

    标签: apache zend-framework mod-rewrite


    【解决方案1】:

    我认为这些条件与第二条规则无关。建议开启重写调试:RewriteLog "/myfolder/mylogfile.log"RewriteLogLevel 3

    试试:

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

    【讨论】:

    • 调试的好主意。但不确定条件是否真的应该与第二条规则相关联。 Zend 框架希望所有静态文件都能正常运行,如果没有静态文件,则通过 index.php 将其余文件汇集到一个控制器中...
    • 刚刚编辑了原始答案,它可能更接近现在的问题。我已经切换到否定条件,这应该消除对两个规则的需要。干杯。
    • 谢谢...不过也没有用。请参阅我更新的问题...顺便说一句,您知道如何添加 httpd-zf.conf 的路径吗?看来路径是问题...
    【解决方案2】:

    找到解决办法了!!

    这是有效的代码:

    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

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多