问题使用.htaccess将下划线替换为连字符

时间:2013-07-19 08:44:28

标签: .htaccess url-rewriting

虽然我已经看到关于这个主题的帖子很少,但我仍然遇到一些问题要实现我的目标。 我的旧网址就像:

http://myhostname.com/offer/1234_Nice_Offer_Cool_Whatever_HEllyeah.htm

显然我想把它们重写为:

http://myhostname.com/offer/1234-nice-offer-cool-whatever-hellyeah.htm

这是我在.htaccess中尝试过的代码。这可以很好地替换URL中的下划线,它们没有任何目录:

RewriteCond %{REQUEST_URI} \.htm$ [NC]    
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [E=underscores:Yes,N] 
RewriteCond %{ENV:underscores} ^Yes$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

因此,这一系列规则适用于URL,如:

http://myhostname.com/1234_Some_Section_hellyeah.htm

但是当我尝试使用相同的URL代码时:

http://myhostname.com/dir1/dir2/dir3/1234_Some_Offer_Or_Section.htm

然后,服务器进行无限循环(我的[N]标志...) 基本上,我想知道以哪种方式影响这些规则的每个目录URL以及为什么我得到这个无限循环。谢谢!

1 个答案:

答案 0 :(得分:2)

你不需要N旗。要在代码后递归替换连字符下划线将起作用:

RewriteRule ^([^_]+)_(.+?\.htm)$ $1-$2 [L,NC,E=underscores:Yes]

RewriteCond %{ENV:REDIRECT_underscores} ^Yes$
RewriteRule ^([^_]+)$ /$1 [R=301,L]
相关问题