我正在使用下面的重写代码为具有查询字符串的页面创建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。
感谢您的帮助。
答案 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]
在测试这些新的重定向之前,请清除浏览器缓存。