У меня есть следующие .htaccess
конфигурации для моих двух версий моего сайта (в/oldsite и/NewSite соответственно):301 правило редиректа нарушает предыдущие правила
RewriteEngine On
# load newsite if not newsite and not oldsite
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^((?!(?:newsite|oldsite)).*)$ newsite/$1 [NC,L]
# load root if request is oldsite
RewriteRule ^oldsite(/.*)?$ /$1 [L,NC]
# certain urls need to be loaded in page.php
RewriteRule ^newsite/(products|services|news|pages)/([a-zA-Z0-9_.-/]+)$ /newsite/page.php?type=$1&var=$2
#remove trailing .php
RewriteRule ^newsite/([a-zA-Z0-9_-]+)$ /newsite/$1.php [NC,L,QSA]
RewriteRule ^newsite/admin/([a-zA-Z0-9_-]+)$ /newsite/admin/$1.php [NC,L,QSA]
Теперь я хочу, чтобы сделать большую часть 301 перенаправлять для всех не-www запросы на WWW, а также 301 переадресацию на URL-адрес без привязки. Например:
www.example.com///
->www.example.com
example.com/////
->www.example.com
www.example.com/somepage//
->www.example.com/somepage
Я попытался добавить следующее в различных позициях в .htaccess
:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Но это нарушает предыдущие правила. Например, ввод example.com
приводит к www.example.com/newsite
.
Вся конфигурация стала спагетти правил, и мне нужно как-то их очистить.
Перенаправление работает, но положить что-то вроде '' example.com /// не удаляет конечные косая черта. Он забирает меня на мою 404 страницу. Вот моя вся конфигурация после внесения ваших предлагаемых изменений: http://pastebin.com/U6aVmJC7 – Chris
Директивы _should_ удалили трейлинг-косые черты на 'example.com ///'. Убедитесь, что кеш браузера очищен.(Вам все равно потребуется ваша первоначальная переадресация WWW в верхней части вашего скрипта, как упоминалось выше.) Я обновил свой ответ, чтобы разрешить более общий сценарий - сокращение косой черты _anywhere_ в URL-адресе. Что касается вашего сервера, то имеет значение, является ли запрос для 'example.com /' или 'example.com ///' - они оба разрешают одно и то же. Получает ли 'example.com /' результат 404? Согласно вашим директивам это будет переписано в '/ newsite /' - это действительно? – MrWhite