#.htaccess #redirect #subdomain
#.htaccess #перенаправление #поддомен
Вопрос:
По сути, у моей компании, в которой я работаю, есть сайт, на котором размещены страницы для нескольких разных магазинов. У каждого магазина есть свое собственное правило поддомена в cpanel, чтобы пользователи могли вводить простой URL-адрес из листовки, чтобы перейти на сайт своего локального магазина. Однако недавно Bing начал индексировать один из наших поддоменов, что вызывает некоторую путаницу у наших клиентов, поскольку ссылка отображается как https: // [citystate] .example.com/find-us/altstate/altcity
Я просмотрел несколько файлов и дошел до того, что, судя по тому, что я видел, должно работать, но не работает.
RewriteCond %{HTTP_HOST} ^[citystate].example.com
RewriteRule ^(.*)$ https://example.com/$1 [L]
Может кто-нибудь, пожалуйста, помочь в том, где я ошибаюсь?
ОБНОВЛЕНИЕ: приведенная выше часть работает, но URL перенаправляется на индексную страницу, потому что страница отображается так, как будто ее не существует. Однако, если я возьму ссылку и открою ее в отдельном окне / вкладке браузера, она откроется. Цвет меня смутил.
Комментарии:
1. Хорошо. Итак, я обнаружил, что мне нужна эта часть, чтобы захватить сайт и изменить его направление. Перезаписать второй %{HTTP_HOST} ^[citystate].example.com RewriteRule ^(.*)$ example.com /$1 [L] Однако конечная часть URL-адреса удаляется, и сайт по умолчанию переходит на индексную страницу. Есть ли способ передать фрагмент URL, который появляется после example.com /[все это]? Редактировать: попытка отформатировать комментарий для удобства чтения
2. Пожалуйста, отредактируйте свой вопрос, чтобы включить эту дополнительную информацию. Если код не отформатирован правильно, специальные символы отсутствуют, и их трудно прочитать.
3. @MrWhite, обновил условие перезаписи и правило перезаписи.
4. «конечная часть URL-адреса удаляется, и сайт по умолчанию переходит на индексную страницу» — ваш обновленный пример кода уже делает это. Возможно, у вас конфликт с другими директивами в вашем
.htaccess
файле? Пожалуйста, укажите содержимое вашего.htaccess
файла в вашем вопросе с учетом этих директив.5. @MrWhite, ты был прав. Условие перезаписи, установленное для случая, когда файл не найден, возвращало его на страницу индекса. Теперь, что не имеет смысла, так это то, что URL-адрес работает, но он не может открыть страницу, если перенаправлен таким образом. (ИЗ) example.com/find-us/state (КОМУ) example.com/find-us/state Если я открываю сайт по этой ссылке, он работает, но не через редирект.
Ответ №1:
RewriteCond %{HTTP_HOST} ^[citystate].example.com RewriteRule ^(.*)$ https://example.com/$1 [L]
Это правило должно располагаться в верхней части вашего .htaccess
файла, чтобы избежать конфликтов с другими директивами.
Однако есть несколько потенциальных проблем:
-
Фрагмент регулярного
[citystate]
выражения соответствует только одному символу в классе символов.[
и]
обозначает класс символов. Таким образом, это соответствует либоc
,i
,t
,y
,s
,t
,a
либоe
— только один символ. Вам нужно указать слово буквально, без квадратных скобок. Однако, если у вас много «городов», то для этого требуется правило для каждого города, вы можете сделать регулярное выражение более общим, чтобы соответствовать любому городу. например.[a-z]
(т.е. 1 или более строчных букв в диапазонеa
доz
.) -
Вам не хватает флага
R
(redirect
) в файлеRewriteRule
. eg.[R,L]
or[R=301,L]
. Однако, поскольку вы указали схему имя хоста в целевом URL, это неявно вызовет 302 (временное) перенаправление, что нормально. Однако, чтобы решить проблему с Bing, это должно быть 301 (постоянное) перенаправление. Но сначала протестируйте с 302 (временными) перенаправлениями, чтобы избежать потенциальных проблем с кэшированием.
Незначительные проблемы:
-
^(.*)$
— регулярное выражение по умолчанию является жадным, поэтому^
привязки и$
(начало и конец строки) являются излишними. -
Нет необходимости в
RewriteRule
замене буквальных точек и косых черт с обратной косой чертой, поскольку это «обычная» строка, а не регулярное выражение.
Вместо этого попробуйте следующее:
RewriteCond %{HTTP_HOST} ^[a-z] .example.com
RewriteRule (.*) https://example.com/$1 [R=301,L]
Если URL-путь неправильно фиксируется $1
обратной ссылкой, вместо этого вы можете использовать переменную REQUEST_URI
сервера. Например:
RewriteCond %{HTTP_HOST} ^[a-z] .example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
Обратите внимание, что REQUEST_URI
переменная сервера содержит префикс косой черты, поэтому он опущен в строке подстановки.
Комментарии:
1. ты мужик! Оказывается, мне нужно было добавить фрагмент в более высокую точку файла, как вы упомянули, и это работает блестяще. Решаемая