RewriteRule с тире или дефисом

#apache #.htaccess #mod-rewrite #url-rewriting

#apache #.htaccess #мод-перезапись #url-переписывание

Вопрос:

В соответствии с рекомендациями по SEO я меняю URL страницы с

website.com/color_red/ (подчеркивание) для

website.com/color-red/ (тире / дефис)

/color-red/ должен просто выдавать?c=red

В .htaccess это отлично работает с подчеркиванием:

 RewriteRule ^color_([^/.] )/?$ ?c=$1 [L]
 

не с тире:

 RewriteRule ^color-([^/.] )/?$ ?c=$1 [L]
 

Я думаю, что символ dash должен быть экранирован, но я не знаю как.

Ответ №1:

Не могли бы вы попробовать следующее. Пожалуйста, не забудьте очистить кэш вашего браузера перед тестированием ваших URL-адресов.

1-е решение: чтобы обработать оба _ ИЛИ - в ваших URL-адресах, попробуйте выполнить следующее.

 RewriteEngine ON
RewriteRule ^color[_-]([^/]*)/?$ ?c=$1 [L]
 

2-е решение: если вы хотите обрабатывать - только свои URL-адреса, попробуйте выполнить следующее.

 RewriteEngine ON
RewriteRule ^color-([^/]*)/?$ ?c=$1 [L]
 

Комментарии:

1. Не могли бы вы, пожалуйста, подтвердить, хотите ли вы добавить строку запроса в Uri или после DNS-имени, которое должно появиться?

2. /color-red/ должен просто выдавать?c=red

3. @DavidePalmieri, я только что проверил, и это сработало нормально для меня, не могли бы вы, пожалуйста, очистить свой кэш один раз и попробовать? Если у вас есть с собой команда curl, вы могли бы проверить и это, например curl -IL "http://localhost/color_red/" , дайте мне знать, как это происходит.

4. Работает ли это также с dash? /colo-красный/ (вы написали ссылку с подчеркиванием /color_red/)

5. @DavidePalmieri, ИМХО, я считаю, что с вашими показанными образцами мое 2-е решение RewriteRule ^color-([^/]*)/?$ ?c=$1 [L] (в основном мы не хотим . участвовать в его переговорах, потому что его нет в образцах) будет лучше в вашем случае с показанными образцами, приветствия.

Ответ №2:

Простое решение — экранировать символ дефиса / - дефиса квадратными скобками [-] :

 RewriteRule ^color[-]([^/.] )/?$ ?c=$1 [L]