1
我看到很多类似的问题,但没有帮助我至今:防止进入搜索引擎不友好的URL,然后重定向到搜索引擎友好的(规范)的网址
我有我的下/song/song.php脚本的逻辑?url = lang/params(seo-不友好的URL)。我用这个改写有一个友好的URL并加载从搜索引擎不友好的一个内容,使用参数语言来区分:
RewriteRule ^songs-and-chords/(.*?)(/*)?$ /song/song.php?url=en/$1 [NC,L]
RewriteRule ^canzoni-e-accordi/(.*?)(/*)?$ /song/song.php?url=it/$1 [NC,L]
现在我想阻止访问/song/song.php,迫使一个重定向到搜索引擎友好的一个,所以这样的事情,使用%{} THE_REQUEST使外部重定向:
RewriteCond %{THE_REQUEST} .*?song/song\.php\?url=it/(\S*) [NC]
RewriteRule /canzoni-e-accordi/$1 [R,L]
RewriteCond %{THE_REQUEST} .*?song/song\.php\?url=en/(\S*) [NC]
RewriteRule /songs-and-chords/$1 [R,L]
RewriteCond %{THE_REQUEST} ^.*?song/song\.php.*$ [NC]
RewriteRule /songs-and-chords/ [R,L]
但是这个规则执行...什么我做错了不?我如何以良好的方式调试这个?
(我已经在song.php脚本中使用rel =“canonical”,但仍然希望脚本根本无法访问)。
谢谢,这是正确的。唯一的问题是:这个URL /song/song.php?url=it/pink-floyd/the-wall 重定向到 /canzoni-e-accordi/pink-floyd/the-wall?url = it/pink -floyd/the-wall 如何摆脱附加的url参数? QSA标志未设置,因此它来自何处? (GET之后的“\”是什么)? – Fabbio
@Fabbio将'%1'更改为'%1?'将修复重定向的url中添加的查询字符串。至于'GET \'字符串;发送给服务器的请求格式为:'GET /song/song.php?url=it/pink-floyd/the-wall HTTP/1.1'。 'GET'后我逃离了这个空间。你也可以使用'\ s'而不是'\' – hjpotter92
就像一个魅力!但我现在有点失落......%1的含义是什么?这不是正则表达式的东西,对吧?我也不清楚为什么我应该用“^”来启动一个RewriteRule。你能建议关于这些问题的任何好的文档页面吗? – Fabbio