#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]