这应该接受任何uri并将其作为查询字符串的一部分发送到将处理它的脚本。
RewriteEngine On
RewriteCond %{REQUEST_URI} !(css.php|gif|jpe?g|png|css|js|json|xml|ico)$
RewriteRule ^(.*)(/)?$ index.php?where=$1 [QSA,L]
我问,因为它适用于某些服务器,而不适用于其他服务器。在某些情况下,它只是忽略整个事情,好像网址重写已经关闭,而在其他情况下,只要上传了具有上述内容的.htaccess,就会报告错误的请求。
答案 0 :(得分:1)
BTH我会稍微改变一下这条规则:
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(css.php|gif|jpe?g|png|css|js|json|xml|ico)$
RewriteRule ^(.*)/?$ index.php?where=$1 [QSA,L]
将\.
添加到RewriteCond模式中以确保它仅适用于具有此类EXTENSIONS的文件(否则模式也将匹配最后具有该文本的文件,即/something/mygif
<> /something/my.gif
)。
在RewriteRule模式中将(/)
替换为/
- 它在功能上没有区别,但在资源方面稍微轻了一点。
返回主题:
如果它“忽略整个事情,好像网址重写已关闭”那么很可能不支持/启用.htaccess文件(或者它应该具有{{{ 3}}指令:例如AccessFileName ht.access
)。
要检查它,请尝试将一些其他指令放入.htaccess并查看它是否有效(例如:ErrorDocument 404 /404.php
或DirectoryIndex index.php
等)。
如果“只要上传了上述内容的.htaccess就会报告错误请求”那么很可能这些指令不允许放在.htaccess中(需要{{1} <或者至少AllowOverride All
; AccessFileName)或mod_rewrite未启用。
检查Apache的错误日志 - 它应该有条目提及这一时刻。