Dig*_*805 7 php apache .htaccess mod-rewrite
我有一个非常简单的.htaccess文件,用于将任何请求重定向到index.php,如果该文件不存在且不是目录.
[建议修改前]
<IfModule mod_rewrite.c>
RewriteEngine On
#REWRITE RULES
#---------------------
#RULE COMPLETEREWRITE
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* index.php
</IfModule>
Run Code Online (Sandbox Code Playgroud)
[建议修改后]
<IfModule mod_rewrite.c>
RewriteEngine On
#REWRITE RULES
#---------------------
#RULE COMPLETEREWRITE
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
(htaccess修改之间没有变化)
目前,无论文件是否存在,它都会重定向到index.php.任何人都可以解释为什么会这样吗?
这似乎是一个愚蠢的问题 - 但我已经做了一些研究并且发现很少.
这是在Ubuntu下的Apache 2.4中运行,启用了mod_rewrite,显然我希望如此.
案例情景:
"/resource/img/panoramas/1.png"中的文件存在.通过本地文件浏览器,SSH和FTP在我的VM文件系统上进行验证.
在实现htaccess文件之前,可以远程访问此文件.我有一个缓存版本来证明它.
实现htaccess文件后,任何尝试命中此路径都会返回index.php.
===============
我的CMS的核心包含在使用重写时创建标头的方法.如果我登陆index.php本身,我不会标记重写(如预期的那样).如果我点击此目录下的任何其他路径,我最终会在index.php上带有重写标志(部分预期).如果文件存在,则情况不应该如此,但仍然与预期相反.
也可能需要注意,此htaccess文件是从web.config(IIS)文件自动生成的,而在IIS下,这些规则和我的CMS都完全按预期工作.
最后(与最佳实践相反),整个目录被chmod到777,以便消除文件无法访问的可能性.
尝试这个:
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^.* index.php
Run Code Online (Sandbox Code Playgroud)
这是一个疯狂的猜测。如果我们要提供的不仅仅是猜测,您应该启用日志记录并发布日志,因为可能出错的情况很大;)
RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 5
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
287 次 |
最近记录: |