Apache 重写连字符的下划线,除非前面有正斜杠



我正在尝试提出正确的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-page不是 http://host/-test-location/-test-page

感谢您的帮助!

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

RewriteRule ^(.*?[^/])_+(.*)$ $1-$2 [E=underscores:Yes,N]
RewriteCond %{ENV:underscores} ^Yes$
RewriteRule ^(.+)$ /$1 [R=302,L]
尝试在

第一个正则表达式中将*更改为+

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

+意味着它必须至少匹配一个。因此,刺痛_test_之前没有任何非"_"字符,因此不匹配。

最新更新