1

我试图重写网址

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(内部服务器错误)。有什么问题?

4

2 回答 2

3

这看起来是正确的,但实际上你正在尝试做的是反过来——你正在尝试重写输入 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 的答案非常适合您。

于 2013-06-27T08:08:03.280 回答
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]
于 2013-06-27T08:17:43.990 回答