代码之家  ›  专栏  ›  技术社区  ›  joedevon

为什么我的最后一条规则[L]在apache中不起作用?

  •  1
  • joedevon  · 技术社区  · 16 年前

    背景,我正在运行Zend Framework应用程序。尽可能地从中获得最大的性能。因此,我试图将规则从.htaccess中移出,精确地访问Zend Framework一本书的作者在这篇博客文章中的信件: http://www.armando.ws/2009/03/how-to-run-zend-framework-with-no-htaccess-file/

    以下是在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]
    

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

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

    有没有办法让它正常工作?

    更新

    在打开日志记录(我不得不将其提升到loglevel9)之后,结果表明即使删除 重写规则^.*$/index.php[NC,L] 允许静态文件解析,无论发生什么情况,它都不符合条件RewriteCond%{REQUEST_FILENAME}-s…它只是“通过”了,这允许文件显示。。。

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   segy    16 年前

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

    尝试:

    RewriteCond %{REQUEST_FILENAME} !-s 
    RewriteCond %{REQUEST_FILENAME} !-l 
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ /index.php [NC,L]
    
        2
  •  1
  •   joedevon    16 年前

    找到了解决办法!!

    以下是有效的代码:

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

    这篇维基文章解释了它不起作用的原因: http://wiki.apache.org/httpd/RewriteContext

    推荐文章