Перезапись URL-адреса для корня веб-сайта

Как пытались описать @msp9011 и @user4556274, ваш сервер должен прослушивать «любой адрес» вместо адреса «127.0.0.1». Таким образом, в зависимости от программного обеспечения вашего веб-сервера, вы можете изменить так называемый «адрес прослушивания» на:

  • заменить 127.0.0.1 ничем, т.е.удалить конфигурацию
  • заменить 127.0.0.1 на 0.0.0.0, что означает прослушивание любого IP
  • добавить конфигурацию 0.0.0.0, чтобы переопределить значение по умолчанию 127.0.0.1
  • что-то в этом роде, проверьте свою документацию на предмет «прослушивания» или «привязки» адреса и как сделать так, чтобы он НЕ прослушивал только локальный адрес

Если вы расскажете нам больше о том, какое программное обеспечение веб-сервера у вас есть, мы, возможно, сможем помочь с более подробной информацией об описанной выше процедуре.

Тем не менее, в случае успеха эта строка в вашем текущем выводе netstat:

tcp        0      0 127.0.0.1:8082          0.0.0.0:*               LISTEN      4163/centrifuge

должно выглядеть так, если вы успешно обновили конфигурацию:

tcp        0      0 0.0.0.0:8082            0.0.0.0:*               LISTEN      4163/centrifuge

Документация, процитированная @user4556274, означает, что если новое соединение приходит с интерфейсом, имеющим локальный IP-адрес 123.456.78.9, то цель ПЕРЕНАПРАВЛЕНИЯ изменит порт назначения на 8082, а хост назначения на 123.456.78.9 (т.е. НЕ 127.0.0.1 ). Поскольку ваша конфигурация прослушивает только 127.0.0.1, она не будет видеть пакеты с любым другим адресом назначения. Адрес 0.0.0.0 является особым и означает, что он будет прослушивать все адреса.

1
24.11.2020, 14:39
2 ответа

I've added the first rule block after noticing that the solution suggested in the link had a bug -- that is, URL https://mysite.com/ returned a File not Found. Now it works.

Думаю, это не ошибка. Код, который вы извлекли из здесь , предназначен для использования в файле .htaccess, а не в директиве VirtualHost. Оказывается, RewriteRule не работает точно так же в файле.htaccess, как в директиве VirtualHost , и это вызывает некоторые проблемы.

Давайте посмотрим исходный код:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(([^/]+/)*([^/.]+))\.php[\ ?]
RewriteRule \.php$ /%1/ [R=301,NC,L]
RewriteRule ^(.*)/$ /$1.php [NC,L]

В директиве VirtualHost (, в отличие от .htaccess), начальная косая черта пути также сопоставляется с регулярным выражением, таким образом, когда вы отправляете запрос на http://mysite.com/, правило

 RewriteRule ^(.*)/$ /$1.php [NC,L]

соответствует /регулярному выражению ^(.*)/$. Это означает, что обратная ссылка $1будет равна пустой строке, а результирующий путь будет /.php, который не существует на вашем сервере.

Простое решение — поместить исходный код в .htaccessфайл в DocumentRoot вашего сервера (, то есть в каталог, в котором находятся все ваши общедоступные файлы ).

Однако, если вы хотите сохранить RewriteRules в директиве VirtualHost (не рекомендуется ), вы можете немного изменить исходный код, добавив косую черту:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(([^/]+/)*([^/.]+))\.php[\ ?]
RewriteRule \.php$ /%1/ [R=301,NC,L]
RewriteRule ^/(.*)/$ /$1.php [NC,L]

Теперь при отправке запроса на http://mysite.com/Apache безуспешно пытается сопоставить /с ^/(.*)/$, поэтому URL-адрес останется без изменений. С другой стороны, запрос к http://mysite.com/foo/будет сопоставлять /foo/с ^/(.*)/$, сопоставляя его с /foo.php, что является желаемым результатом.

Кроме того , имейте в виду, что, если вы не укажете полный URL-адрес назначения в RewriteRule, Apache предполагает, что он находится в локальной файловой системе вашего сервера (, а не в DocumentRoot):

A rewrite target that does not begin with http:// or another protocol designator is assumed to be a file system path.

1
18.03.2021, 22:48

Я решил свою проблему, изменив все внутренние ссылки на домашнюю страницу с

https://mysite.com/index.php 
с

по

https://mysite.com/  
1
18.03.2021, 22:48

Теги

Похожие вопросы