重写规则以重定向到SEO友好URL

时间:2019-04-16 15:17:42

标签: apache redirect mod-rewrite

我正在使用下面的重写代码为具有查询字符串的页面创建SEO友好URL

RewriteRule certificates/finance curr/certificate.php?id=26 [L,QSA]

但是现在我想从不友好的URL(即curr / certificate.php?id = 26)重定向到更友好的一个(即如果有人使用不友好的URL,则为证书/财务)

我尝试添加以下代码

RewriteCond %{QUERY_STRING} id=26
RewriteRule dir1/xyz.php /certificates/finance? [R=301,L]

,但是然后我收到太多重定向错误。有没有一种方法可以创建SEO友好的URL,并让用户访问非SEO友好的URL。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您需要匹配%{THE_REQUEST}而不是%{QUERY_STRING}变量。由于您首先重定向然后重写了相同的请求,所以您内部的RewriteRule与带有R标志的Rule发生冲突,并导致无限循环错误。

RewriteCond %{THE_REQUEST} /curr/certificate.php\?id=26\s [NC]
RewriteRule ^ /certificate/finance? [L,R]
RewriteRule certificates/finance curr/certificate.php?id=26 [L,QSA]

如果您的Apache版本是2.4,则还可以在RewriteRule中使用END标志来立即终止重写处理。这样可以避免在重定向和重写同一请求时出现无限循环错误。

RewriteCond %{QUERY_STRING} ^id=26$ [NC]
RewriteRule ^curr/certificate.php$ /certificate/finance? [L,R]
RewriteRule certificates/finance curr/certificate.php?id=26 [QSA,END]

在测试这些新的重定向之前,请清除浏览器缓存。