我已经创建了一个控制器文件,用于处理将用户重定向到正确的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重定向。
答案 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一样,我不知道为什么(?:^|&)
有效......