mod_rewrite和.htaccess - 如果脚本/文件存在则停止重写

时间:2011-03-14 23:23:26

标签: .htaccess mod-rewrite

这是我的htaccess:

RewriteEngine On



# Stop if it's a request to an existing file.

RewriteCond %{REQUEST_FILENAME} -f [NC,OR]

RewriteCond %{REQUEST_FILENAME} -d [NC]

RewriteRule .* - [L]



# Redirect all requests to the index page

RewriteRule ^([^/])         /index.php          [L]

现在这会将所有内容转发到我的index.php脚本!如果脚本存在,它不会停止。任何人都知道为什么这不起作用?我到处寻找,但我真的不懂mod_rewrite(就像我想的那样!)。

问题出现了,因为我已经放入<script>标签,这些标签指向我的web目录中的.js文件,然后转发到index.php脚本。 Web开发人员工具栏告诉我这一点。 :)点击firefox视图源窗口中js文件的链接也会显示index.php输出。

谢谢。

2 个答案:

答案 0 :(得分:8)

这是因为在处理重写规则后,整个过程将使用新的url重新启动。每次使用更改后的URL,URL的处理都可以反复执行规则,直到没有更改(没有找到应用规则)。

你需要这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)         /index.php          [L]

不要将规则视为一个程序,它们是可以重叠的规则,并且必须尽可能具体。

答案 1 :(得分:1)

我想你应该在第一个条件之后添加[OR]:

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.*) $1 [QSA,L]