更新:问题已解决
几个小时后,我终于明白问题出在文件夹权限中(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]

10-08 05:30
查看更多