Как пытались описать @msp9011 и @user4556274, ваш сервер должен прослушивать «любой адрес» вместо адреса «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 является особым и означает, что он будет прослушивать все адреса.
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.
Я решил свою проблему, изменив все внутренние ссылки на домашнюю страницу с
https://mysite.com/index.php
с по
https://mysite.com/