我试图重写网址
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(内部服务器错误)。有什么问题?
我试图重写网址
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(内部服务器错误)。有什么问题?
这看起来是正确的,但实际上你正在尝试做的是反过来——你正在尝试重写输入 url:
site.com/videos/cat-1/page-2
至:
site.com/videos?cat=1&page=2
编辑
您已经编写了从重定向videos/cat-1/page-2
到的规则videos?cat=1&page=2
。虽然这是您的选择,但如果您正在为 SEO 目的或更清晰的 url 编写规则,那么您希望人们输入的 url 是videos/cat-1/page-2
- 在这种情况下,您拥有的规则将正常工作。
如果您希望人们输入更混乱的网址,那么@anubhava 的答案非常适合您。
很可能您在 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]