阻止访问不友好的URL并重定向到seo友好(规范)URL

时间:2015-10-06 12:00:40

标签: .htaccess mod-rewrite url-redirection friendly-url

我看到很多类似的问题,但到目前为止没有人帮助我:

我在/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"但我仍然希望脚本根本无法访问)。

1 个答案:

答案 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]