Apache mod_rewrite добавляет дополнительный слеш в конец URL

Apache mod_rewrite добавляет дополнительный слеш в конец URL

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

Пожалуйста, скажите мне, сработало ли это.

Оливье

Связанный контент