我试图重写网址
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(内部服务器错误)。什么可能是错的?
答案 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]