使用RewriteRule仅将某些请求重定向到控制器文件

时间:2012-02-07 00:51:33

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

我已经创建了一个控制器文件,用于处理将用户重定向到正确的URL,我想将某些流量定向到此控制器而不会影响其余部分。 http://website.com/shows.php?id=review-1是我要发送给控制器的网址示例。

到目前为止我编写的是以下RewriteRule导致站点范围服务器500服务器错误。

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-[0-9]+(?:&|$) [NC]
RewriteRule ^ /controller.php [QSA,L] 

-[0-9]+条件中删除%{QUERY_STRING}可以消除站​​点范围内的500服务器错误,但不起作用。我试图替换的以下RewriteRule工作正常。

RewriteCond %{THE_REQUEST} ^GET\s/shows\.php\?
RewriteCond %{QUERY_STRING} (?:^|&)id=review-1(?:&|$) [NC]
RewriteRule ^ /review/1/super-baseball-2020/? [R=301,L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9]+)/([0-9]+)/([a-z0-9-]+)?/?$ /shows.php?id=$1-$2 [QSA,L,NC]

最终结果是,转到http://www.website.com/shows.php?id=review-1的用户将以http://www.website.com/controller.php?id=review-1结束处理301重定向。

3 个答案:

答案 0 :(得分:0)

有趣。不是'看起来不对,但我无法得到这条线

RewriteCond %{QUERY_STRING} (?:^|&)id=review-[0-9]+(?:&|$) [NC]

在mod_rewrite中编译,直到我拿出非捕获指标

RewriteCond %{QUERY_STRING} (^|&)id=review-[0-9]+(&|$) [NC]

似乎在我的系统上编译正常,这对你有用吗?

答案 1 :(得分:0)

我认为您需要确定导致500错误的原因。我怀疑重定向工作正常,但您重定向到的页面失败了。

答案 2 :(得分:0)

我仍然不知道你为什么要把简单的东西变成复杂的东西;)

6分钟找+测试。这是应该工作的:

RewriteCond %{QUERY_STRING} (^|(.)+&)(id=review-([0-9]+))($|&.*) [NC]
RewriteRule /shows.php /controller.php?%3 [QSA,L]

PS:像Devin一样,我不知道为什么(?:^|&)有效......