Назад | Перейти на главную страницу

Apache mod_rewrite добавляет лишнюю косую черту в конце URL

Я использую 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]