На этот вопрос уже есть ответ здесь:
Я собираюсь настроить перезапись, чтобы игнорировать регистр имени каталога в URL.
Например, у меня есть
example.com/TestDirectory
Я хочу проигнорировать регистр, чтобы URL-адрес по-прежнему был направлен на
example.com/testdirectory
Вот что у меня есть, но похоже, что он не работает:
# rewrite rules for example.com/TestDirectory
RewriteCond %{http_host} ^example\.com [NC,OR]
RewriteCond %{http_host} ^www\.example\.com\TestDirectory [NC]
RewriteRule $ http://www.example.ccom/testdirectory/
Мне не хватает шаг?
Чтобы реализовать каноническое перенаправление в каталог с правильным регистром (в данном случае все в нижнем регистре), вы можете сделать что-то вроде следующего:
RewriteCond %{REQUEST_URI} !^/testdirectory
RewriteRule ^testdirectory /testdirectory/ [NC,R,L]
NC
( nocase
) флаг RewriteRule
гарантирует, что он будет соответствовать TestDirectory
или TESTDIRECTORY
и т. Д. И директиве RewriteCond
. предотвращает цикл перенаправления, проверяя, что мы еще не находимся в testdirectory
с учетом регистра символов.
Однако это только перенаправляет в каталог. Любой файл после имени каталога теряется. Чтобы перенаправить / TestDirectory /
в / testdirectory /
, попробуйте вместо этого что-то вроде следующего:
RewriteCond %{REQUEST_URI} !^/testdirectory
RewriteRule ^testdirectory/?(.*) /testdirectory/$1 [NC,R,L]
Обратите внимание, что это временное (302) перенаправление . Измените флаг R
на R = 301
, если он предназначен для постоянного использования, но только после того, как вы проверите, что он работает нормально.
RewriteCond% {http_host} ^ www \ .example \ .com \ TestDirectory [NC]
Обратите внимание, что серверная переменная HTTP_HOST
содержит только запрошенное имя хоста. Нет информации о URL-пути. Если вам нужно также проверить хост (если у вас несколько доменов), включите дополнительное условие:
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
(предполагается, что домен уже канонизирован и включает субдомен www.)