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