mod_rewrite заменить '_' на '-' - PullRequest
2 голосов
/ 10 ноября 2010

Я почти там с правилом mod_rewrite, но я прогнулся:)

Мне нужно переписать

country/[countryname].php 

до

country/[countryname]/

тем не менее, [название страны] может иметь такое подчеркивание, как это: 'south_africa.php', и если это так, я хочу заменить его на Hypen: 'South-africa /'

Я также хочу сопоставить, если странапосле него идут цифры: от 'france03.php' до 'france /'

Вот мое правило, оно почти там, но оно все еще добавляет дефис, даже если после подчеркивания нет второй части.

RewriteRule ^country/(.*)_(.*?)[0-9]*\.php$ country/$1-$2 [R=301,L]

так что в настоящее время «страна / юг.php» становится «страна / юг - /»

Может кто-нибудь помочь мне найти недостающий фрагмент головоломки?Благодаря.

Ответы [ 2 ]

3 голосов
/ 10 ноября 2010

Попробуйте это:

RewriteRule ^country/([^_]*)_([^_]*?)\d*\.php$ country/$1-$2 [R=301,L]

Это правило будет сопоставлять URL-адреса с единственным подчеркиванием - вам понадобится другое правило для большего количества подчеркиваний или вообще без него.

Если вы хотите убедиться, что $2 содержит только букву и не является пустой, измените ([^_]*?) на ([a-zA-Z]+).

2 голосов
/ 10 ноября 2010

В качестве альтернативы вы можете сделать это за несколько проходов:

# If request is for something in "country/"
RewriteCond %{REQUEST_URI} ^country/.+\.php$

# Replace underscore and digits with (single) hyphen
RewriteRule [_0-9]+ \-

# Remove extension (and possible trailing hyphen)
RewriteRule ^(.*)-?\.php$ $1

# Final rewrite
RewriteRule ^country/(.*)$ country/$1 [R=301,L]

Не проверено ... и не обязательно "довольно":)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...