我的网址存在问题。
这是我在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
答案 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]
请试一试。