0

我试图用我的网站中的破折号替换所有下划线。我面临一些问题。

问题 1

以下是我网站中的网址

http://localhost/uk_london when clicked redirects to http://localhost/uk-london

但下面的 url 在 url 末尾添加了一个额外的破折号并返回 404 错误

http://localhost/united_states http://localhost/united-states- (gives 404)

当我在最后删除破折号时,它可以正常工作。

问题 2

只有当 url 中只有一个段时,才会替换破折号。在下面的 url 中,没有一个下划线被替换为破折号。

http://localhost/london_uk/city/products_availability_london

下面是我在 htaccess 中的代码

RewriteEngine On
RewriteBase /

RewriteRule ^assets - [L,NC]

RewriteRule !\.(html|php)$ - [S=4]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes]
RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes]

RewriteCond %{ENV:uscor} ^Yes$

我是 htaccess 新手,想知道是什么导致了这些问题。任何解决问题的帮助将不胜感激

4

1 回答 1

0

尝试更换:

RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes]
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes]
RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes]

只需:

RewriteRule ^(.*)_(.*)$ /$1-$2 [L,E=uscor:Yes]

重写引擎将循环并删除所有下划线,只要您的下划线不超过内部重定向限制(将导致 500 错误)。

于 2013-04-03T12:13:26.170 回答