mod_rewrite,规则重叠

时间:2012-05-29 16:02:38

标签: .htaccess mod-rewrite overlapping internal-server-error

我想这样做,以便当我输入http://website.com/5/sometitle时打开/displayvideo.php?id=5&title=sometitle,这当前使用以下代码

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/(.*)$ /displayvideo.php?id=$1&title=$2 [L]

但是我也想这样做,以便当我去http://website.com/5时,它会转到/displayvideo.php?id=5 我已经通过添加

尝试了这个
RewriteRule ^(.*)$ /displayvideo.php?id=$1 [L]

然而,这只是一堆奇怪的废话,如无法打开实际文件,如/somefile.php,因为它会认为somefile.php应该是rewriterule的id标签

执行此操作也会导致其他重写规则失效,因为它会自动认为/displayvideo.php?id=$1是新规则的标记。

基本上,网站上的每个页面都会出现500内部服务器错误

任何人都知道如何解决这个问题? 感谢

2 个答案:

答案 0 :(得分:1)

这应该这样做。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/(.+)$ /displayvideo.php?id=$1&title=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)$ /displayvideo.php?id=$1 [L]

答案 1 :(得分:0)

优化您的RegExp:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([0-9]+)$ /displayvideo.php?id=$1 [L]
RewriteRule ^([0-9]+)/(.*)$ /displayvideo.php?id=$1&title=$2 [L]