我看到很多类似的问题,但到目前为止没有人帮助我:
我在/song/song.php?url=lang/params(seo-unfriendly URL)下有我的脚本逻辑。我使用这个重写有一个友好的URL并加载来自seo不友好的内容,使用参数来区分语言:
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,强制重定向到seo友好的,所以像这样,使用%{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"但我仍然希望脚本根本无法访问)。
答案 0 :(得分:1)
你做错了什么,你的RewriteRule
陈述的模式缺失了。此外,重写的网址将使用%1
引用,而不是$1
。
RewriteCond %{THE_REQUEST} ^GET\ /song/song\.php\?url=it/(\S+) [NC]
RewriteRule ^ /canzoni-e-accordi/%1? [R=301,L]
RewriteCond %{THE_REQUEST} ^GET\ /song/song\.php\?url=en/(\S+) [NC]
RewriteRule ^ /songs-and-chords/%1? [R=301,L]
RewriteCond %{THE_REQUEST} ^GET\ /song/song\.php\s [NC]
RewriteRule ^ /songs-and-chords/ [R=301,L]