mod_rewrite使错误日志填满

时间:2013-02-01 22:55:49

标签: apache mod-rewrite

我正在使用apache的mod重写来制作“漂亮的网址”,这是一个规则的例子:

RewriteRule ^articles/(.+?)\.([0-9]+)/page\=([0-9]+)?$ /index.php?module=articles_full&aid=$2&title=$1&page=$3 [N,NC,QSA]

问题是我的错误日志填满了这样的东西:

[Fri Feb 01 20:36:11 2013] [error] [client 94.246.88.189] File does not exist: /home/gamingon/public_html/articles
[Fri Feb 01 20:35:55 2013] [error] [client 66.249.73.195] File does not exist: /home/gamingon/public_html/articles
[Fri Feb 01 20:34:39 2013] [error] [client 66.249.73.195] File does not exist: /home/gamingon/public_html/articles

什么是阻止错误的最佳方法?它似乎工作正常,但我仍然不认为错误日志应该填写?

1 个答案:

答案 0 :(得分:0)

添加一个RewriteCond,只有在文件不存在时才会启动RewriteRule:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^articles/(.+?)\.([0-9]+)/page\=([0-9]+)?$ /index.php?module=articles_full&aid=$2&title=$1&page=$3 [N,NC,QSA]

编辑:

再次查看重写规则,它是一个非常具体的正则表达式,只有在uri格式为

时才匹配
  • 文字“文章”
  • 任何一个或多个角色
  • 一个点
  • 一个或多个数字
  • 文本“/ pages =”
  • 一个或多个数字

因此,它会匹配以下网址:

但不在以下网址上:

如果你看到404,那么很可能有人试图访问第二种形式的网址。可能是您的网站有一些未正确创建的链接,请检查日志以查看是否可以找到任何引用来帮助追踪问题。

我测试了你的规则,当我给它一个格式正确的URL时,它对我来说很好。