htaccess RewriteCond!-f问题

Hen*_*uta 3 apache .htaccess mod-rewrite

更新:问题解决
了几个小时后,我终于明白问题是在文件夹权限(757而不是755).

该死的,我觉得自己像个白痴,但至少,问题解决了:)

感谢大家!


我的.htaccess和mod_rewrite有一个奇怪的问题.

目前,我在我的root上有以下.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] 
Run Code Online (Sandbox Code Playgroud)

问题是:
我希望能够访问任何现有文件.

即: mysite.com/anydir/myfile.png - >打开anydir/myfile.png
- mysite.com/anydir/script.php - >打开anydir/script.php
- mysite.com/file.png - >打开文件.png
- mysite.com/notadir/imnotafile - >重写

但是,除了第二点之外,一切都有效.我file.php在我的test文件夹中,但是当我这样做时mysite.com/test/file.php,它会继续重写它,它不应该......

我做错了什么?

Gab*_*tos 7

大概可以做到这一点:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

更新1

在这部分代码中:

RewriteRule ^index\.php$ - [L]
Run Code Online (Sandbox Code Playgroud)

[L]立即停止重写过程,不再应用任何规则.所以,

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.php [NC,L] 
Run Code Online (Sandbox Code Playgroud)

不解释.

更新2:

服务器将遵循符号链接:

Options +FollowSymLinks
Run Code Online (Sandbox Code Playgroud)

服务器将禁用多个视图:

Options -MultiViews
Run Code Online (Sandbox Code Playgroud)

将启用重写引擎:

RewriteEngine On
Run Code Online (Sandbox Code Playgroud)

重写的基目录将是/:

RewriteBase /
Run Code Online (Sandbox Code Playgroud)

如果请求与不存在的文件匹配,请继续:

RewriteCond %{REQUEST_FILENAME} !-f
Run Code Online (Sandbox Code Playgroud)

如果请求与不存在的目录匹配,请继续:

RewriteCond %{REQUEST_FILENAME} !-d
Run Code Online (Sandbox Code Playgroud)

index.php在不敏感的情况下重写,并停止执行下一个规则:

RewriteRule index.php [NC,L] 
Run Code Online (Sandbox Code Playgroud)

所以,试试以下内容:

Options +FollowSymLinks
Options -MultiViews

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule index.php [NC,L]
Run Code Online (Sandbox Code Playgroud)