Я использую ExpressionEngine в качестве своей CMS и хотел бы удалить подчеркивания из URL моего сайта и заменить их на дефисы.
Например, у меня есть URL, который отформатирован так:
http://example.com/index.php/menu/friday-lunch
Чтобы удалить index.php
из URL, я использую следующее правило mod_rewrite:
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
, которое работает, поскольку я могу просто ввести: http://example.com/menu/friday-lunch
На старом сайте я использовал подчеркивания вместо дефисов для URI страниц, поэтому я написал правило mod_rewrite
, чтобы перенаправлять URI с подчеркиваниями, чтобы использовать тире.
Так что friday_lunch
становится friday-lunch
с помощьюследующий RewriteRule:
RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]
Это правило работает довольно хорошо, за исключением того, что оно 301 перенаправляет на example.com/index.php/menu/friday-lunch
вместо example.com/menu/friday-lunch
- обратите внимание на добавление index.php
.
Вотвесь .htaccess, которым я сейчас пользуюсь:
<IfModule mod_rewrite.c>
RewriteEngine On
# Removes index.php
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]
</IfModule>
Как я могу перенаправить все свои URL с подчеркиванием на эквивалент с тире?
Бонус: что еще хуже, URL, которые приводятна /system
, нельзя переписывать дефисом, например: example.com/system/login_in/
.