更新:问题已解决
几个小时后,我终于明白问题出在文件夹权限中(757而不是755)。
该死,我觉得自己是个白痴,但至少,问题解决了:)
感谢大家!
我的.htaccess和mod_rewrite有一个奇怪的问题。
当前,我的根目录上有以下.htaccess:
Options +FollowSymLinks
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.php [NC,L]
问题是:
我希望能够访问任何现有文件。
即:mysite.com/anydir/myfile.png->打开anydir / myfile.png
-mysite.com/anydir/script.php->打开anydir / script.php
-mysite.com/file.png->打开file.png
-mysite.com/notadir/imnotafile->重写
但是,除第二点外,其他所有方法都有效。我的
file.php
文件夹中有一个test
,但是当我执行mysite.com/test/file.php
时,它会继续重写它,并且不应该...我做错了什么?
最佳答案
大概做到这一点:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
更新1
在这部分代码中:
RewriteRule ^index\.php$ - [L]
[L]
立即停止重写过程,不要再应用任何规则。所以,RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.php [NC,L]
没有解释。
更新2:
服务器将遵循符号链接:
Options +FollowSymLinks
服务器将禁用多视图:
Options -MultiViews
重写引擎将被启用:
RewriteEngine On
重写的基本目录为
/
:RewriteBase /
如果请求与不存在的文件匹配,请继续:
RewriteCond %{REQUEST_FILENAME} !-f
如果请求与不存在的目录匹配,请继续:
RewriteCond %{REQUEST_FILENAME} !-d
在不敏感的情况下,重写为
index.php
并停止执行下一条规则:RewriteRule index.php [NC,L]
因此,请尝试以下操作:
Options +FollowSymLinks
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule index.php [NC,L]