Я использую CentOS 6.0 и пытаюсь заставить mod_rewrite удалить www из любого URL-адреса, начинающегося с него. Вот код, который у меня есть в httpd.conf:
ПРИМЕЧАНИЕ:Я использую VPS с полным доступом root, поэтому не использую файлы .htaccess или какие-либо настройки «для каждого каталога».
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.aaronjwood\.com$
RewriteRule ^(.*)$ http://aaronjwood.com/$1 [R=301,L]
Это работает нормально для всех страниц, за исключением того, что URL будет записан вhttp://aaronjwood.com//(обратите внимание на две косые черты) илиhttp://aaronjwood.com//contact.php. Может ли кто-нибудь помочь мне разобраться, почему это происходит?
решение1
Поскольку это в вашем основном файле конфигурации, а не в файле per-directory ( <Directory>
или .htaccess
), то начальный слеш не удаляется для контекста. На самом деле он добавляет (или пытается добавить - не уверен, удаляет ли Apache лишнее в большинстве случаев или это делает клиентский браузер) второй слеш к каждой перезаписи.
Просто учтите тот факт, что начальный слеш включен в строку, которую вы сопоставляете:
RewriteRule ^/(.*)$ http://aaronjwood.com/$1 [R=301,L]
решение2
Поскольку он находится непосредственно в виртуальном хосте, вот решение: удалите здесь слеш:http://aaronjwood.com$1
Еще один совет: когда вы одни, ^(.*)$
то это то же самое, что (.*)
.
Итак, вот решение:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.aaronjwood\.com$
RewriteRule (.*) http://aaronjwood.com$1 [R=301,L]
Пожалуйста, скажите мне, сработало ли это.
Оливье