mod_rewrite新手 - 这是对的吗?

时间:2011-07-19 16:13:47

标签: mod-rewrite apache2

这应该接受任何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,就会报告错误的请求。

1 个答案:

答案 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]
  1. \.添加到RewriteCond模式中以确保它仅适用于具有此类EXTENSIONS的文件(否则模式也将匹配最后具有该文本的文件,即/something/mygif<> /something/my.gif)。

  2. 在RewriteRule模式中将(/)替换为/ - 它在功能上没有区别,但在资源方面稍微轻了一点。


  3. 返回主题:

    • 如果它“忽略整个事情,好像网址重写已关闭”那么很可能不支持/启用.htaccess文件(或者它应该具有{{{ 3}}指令:例如AccessFileName ht.access)。

      要检查它,请尝试将一些其他指令放入.htaccess并查看它是否有效(例如:ErrorDocument 404 /404.phpDirectoryIndex index.php等)。

    • 如果“只要上传了上述内容的.htaccess就会报告错误请求”那么很可能这些指令不允许放在.htaccess中(需要{{1} <或者至少AllowOverride All; AccessFileName)或mod_rewrite未启用。

      检查Apache的错误日志 - 它应该有条目提及这一时刻。