url从_重定向到 - htaccess

时间:2016-04-24 18:46:46

标签: php .htaccess redirect mod-rewrite

我的网址存在问题。

这是我在htaccess中的代码:

RewriteRule ^music-(.*)-([0-9_]+)\.html$ /artiste.php?g=$1&page=$2 [NC,L]

因此,Google或Bing上的某些网址可能会显示为music_(.*)_([0-9_]+)\.html 如果可能,我想使用htaccess将_更改为-

我希望将_的任何网址更改为-,因为所有链接都与-一致,但在我的研究中,某些网址有_,所以我想要更换他们与-。 例如:

错误:http://www.example.com/me_like_this.html 正确:http://www.example.com/me-like-this.html

2 个答案:

答案 0 :(得分:1)

您可以在/.htaccess文件中使用以下内容:

RewriteEngine On

# Replace underscores with hyphens, set the environment variable,
# and restart the rewriting process. This essentially loops
# until all underscores have been converted to hyphens.

RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=underscore:yes,N]

# Then, once that is done, check if the underscore variable has
# been set and, if so, redirect to the new URI. This process ensures
# that the URI is rewritten in a loop *internally* so as to avoid
# multiple browser redirects.

RewriteCond %{ENV:underscore} yes
RewriteRule (.*) /$1 [R=302,L]

然后添加您的规则:

RewriteRule ^music-(.+)-(\d+).html$ /artiste.php?g=$1&page=$2 [NC,L]

如果这对您有用,并且您希望将浏览器和搜索引擎缓存重定向,请将302更改为301

  

注意:RewriteRule我已将.*更改为.+,因此它仅匹配一个或多个字符,而不是零个或多个个字符。另外,我已将[0-9_]+更改为\d+,这是速记等效而不包括下划线,无论如何都会将其转换为连字符。如果要在最后一个捕获组中包含连字符,请将(\d+)更改为([\d-]+)

答案 1 :(得分:0)

RewriteEngine On
RewriteRule ^(.*)_(.*)$ /$1-$2 [L,R=301]
RewriteRule ^music-(.*)-([0-9_]+)\.html$ /artiste.php?g=$1&page=$2 [NC,L]

请试一试。