htaccess中重写的意外行为

时间:2015-05-06 16:23:42

标签: apache .htaccess mod-rewrite url-rewriting

这是我的htaccess文件

RewriteEngine on 
rewriterule ^([a-zA-Z0-9]+) /vixer.php?v=$1 [QSA] 

主要问题是,当我输入www.example.com/vix_25时,它会转到404

当我输入另一个url / vix25时它起作用..我真的不明白什么是差异以及为什么第一个不起作用。

你能帮助我吗?感谢

2 个答案:

答案 0 :(得分:2)

您需要在模式中添加下划线,以便它可以与“请求的URI”中的“_”匹配

 ([a-zA-Z0-9_]+) 

试试这个:

 RewriteEngine on 
 rewriterule ^([a-zA-Z0-9_]+)$ /vixer.php?v=$1 [QSA,L] 

答案 1 :(得分:1)

我会让你的规则更健壮。告诉apache,如果它不是真正的文件而不是真正的目录,那么重写它。这也可以防止404。我也改变了正则表达式,以便它更好地匹配而不是单独添加匹配。此外,我会确保MultiViews关闭。

Options -MultiViews
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
rewriterule ^([^/]+)/?$ /vixer.php?v=$1 [QSA,L]