这是我的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输出。
答案 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]