У меня есть VPS, на котором я пытаюсь настроить несколько веб-сайтов. Для одного из них, с текущим набором правил (ниже), доступ
hxxp://example.com
отправляет меня в
hxxp://www.example.com// [note the two //]
Мой httpd.conf выглядит так:
NameVirtualHost *:80
[other VirtualHosts]
<VirtualHost *:80>
ServerAlias www.example.com example.com
DocumentRoot /var/www/html/example.com
ServerName www.example.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
<directory /var/www/html/example.com>
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^([0-9]+)(.*)/?$ /showitem.php?j=$1 [NC]
</directory>
</VirtualHost>
Проблема в том, что .*
включает косая черта, которая уже есть в URL. Затем вы отправляете перенаправление на http://www.example.com/$1
который включает еще одну косую черту.
Одно из следующих действий решит вашу проблему:
RewriteRule (.*) http://www.example.com$1 [R=301,L]
или
RewriteRule /(.*) http://www.example.com/$1 [R=301,L]
Этого не произойдет внутри <Directory >
блок или в .htaccess
файл, потому что в обоих этих случаях в URI нет ведущей косой черты.
Попробуй это:
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*) http://www.example.com$1 [R=301,L]
Вы можете легко избавиться от этого двойного /, позволив регулярному выражению части директивы "съесть" его:
RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301,L]
Я никогда не слышал о hxxp протокол.
Ваш виртуальный хост отвечает как на example.com, так и на www.example.com запросы.
Исправить просто: добавьте отдельный виртуальный хост для www.example.com и удалите ServerAlias с example.com.
Затем перенаправить постоянный / http://www.example.com/
Обратите внимание на преобладание косой черты как для источника, так и для цели - это ваша ошибка.
Я не собираюсь показывать вам, как исправить rewiterule, поскольку вам не следует его использовать.