2

我正在尝试提出正确的 RewriteRule 或 RewriteCond 来将下划线更改为连字符,除非下划线前面有正斜杠。我制定了以下规则,将所有下划线更改为连字符,无论它前面是什么:

RewriteRule ^([^_]*)_+(.*)$ $1-$2 [E=underscores:Yes,N]

RewriteCond %{ENV:underscores} ^Yes$
RewriteRule (.*) http://%{HTTP_HOST}/$1 [R=301,L]

我需要修改什么以防止'/_'被更改为'/-'?

例子:

http://host/_test_location/_test_page更改为 http://host/_test-location/_test-pageNOT http://host/-test-location/-test-page

谢谢您的帮助!

4

2 回答 2

0

尝试在您的第一个正则表达式中更改*+

RewriteCond %{REQUEST_URI} ^(.*)/([^/_]+)_+(.*)$
RewriteRule ^ %1/%2-%3 [E=underscores:Yes,N]

意味着它+必须至少匹配一个。因此,sting_test在 and 之前没有任何非“_”字符_,因此将不匹配。

于 2013-11-14T17:00:34.260 回答
0

试试这个稍微修改的规则:

RewriteRule ^(.*?[^/])_+(.*)$ $1-$2 [E=underscores:Yes,N]

RewriteCond %{ENV:underscores} ^Yes$
RewriteRule ^(.+)$ /$1 [R=302,L]
于 2013-11-14T17:36:49.420 回答