3

更新:问题解决
了几个小时后,我终于明白问题出在文件夹权限中(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 -> 打开文件.png
- mysite.com/notadir/imnotafile -> 重写

但是,除了第二点之外,一切正常。我的file.php文件test夹中有一个,但是当我这样做时mysite.com/test/file.php,它会不断重写它,它不应该......

我做错了什么?

4

2 回答 2

7

可能会做的伎俩:

<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]
于 2013-03-09T20:59:57.603 回答
-1

如果您只想摆脱 404 错误,您可以使用

ErrorDocument 404 index.php

如果您想重写每个目录,我想您应该删除;

RewriteCond %{REQUEST_FILENAME} !-d
于 2013-03-09T21:06:30.977 回答