网址重写错误

时间:2013-06-27 08:05:15

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

我试图重写网址

site.com/videos?cat=1&page=2

到这个

site.com/videos/cat-1/page-2

并使用此:

RewriteRule ^videos/cat-([0-9]+)/page-([0-9]+)/?$ videos?cat=$1&page=$2
RewriteRule ^videos/cat-([0-9]+)/?$ videos?cat=$1

我收到错误#500(内部服务器错误)。什么可能是错的?

2 个答案:

答案 0 :(得分:3)

看起来是正确的,但你想要做的事情实际上是相反的 - 你正在尝试重写输入网址:

site.com/videos/cat-1/page-2

要:

site.com/videos?cat=1&page=2

修改 您已将规则编写为从videos/cat-1/page-2重定向到videos?cat=1&page=2。虽然这是您的选择,但如果您正在编写用于搜索引擎优化目的的规则或更清晰的网址,那么您希望人们输入的网址是videos/cat-1/page-2 - 在这种情况下,您拥有的规则将正常工作。

如果你想让人们输入更加便宜的网址,那么@ anubhava的回答对你来说是完美的。

答案 1 :(得分:3)

很可能你在Apache mod_rewrite中导致了无限循环,这导致500。

用以下代码替换您的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# to redirect /videos?cat=1&page=2 => /videos/cat-1/page-2
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(videos)\?cat=([^&]+)&page=([^\s]+) [NC]
RewriteRule ^ /%1/cat-%2/page-%3? [R=302,L,NE]

RewriteCond %{QUERY_STRING} !^.+$ [NC]
RewriteRule ^videos/cat-([0-9]+)/?$ /videos?cat=$1 [L,QSA,NC]

# to forward /videos/cat-1/page-2 => /videos?cat=1&page=2
RewriteCond %{QUERY_STRING} !^.+$ [NC]
RewriteRule ^videos/cat-([0-9]+)/page-([0-9]+)/?$ /videos?cat=$1&page=$2 [L,QSA,NC]