apache rewrite: принудительно устанавливает https и имя сервера, а не IP - PullRequest
1 голос
/ 22 мая 2011

Я хочу, чтобы мой apache всегда заставлял людей использовать https и отображал IP-адреса поиска, которые будут перенаправлены на имя сервера.Следующие настройки (в файле httpd.conf) обеспечивают перенаправление http на https:

<Location />
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://my_server.example.com%{REQUEST_URI}
</Location>

Но теперь я также хочу, чтобы, если люди набирают 192.168.1.2, они перенаправлялись на my_server.example.com.Подводя итог:

http://192.168.1.2/someurl -> https://my_server.example.com/someurl

Я пробовал несколько вещей, но либо мои настройки игнорируются, либо я оказываюсь в цикле перенаправления.какие-нибудь намеки?

Ответы [ 2 ]

2 голосов
/ 22 мая 2011

Если у вас есть доступ к основной конфигурации, а не только к .htaccess, это проще всего сделать с отдельными виртуальными хостами, чем прибегать к бензопиле Швейцарской армии, которая называется mod_rewrite.

<VirtualHost *:80>
    Redirect permanent / https://my_server.example.com/
</VirtualHost>
<VirtualHost *:443>
    Redirect permanent / https://my_server.example.com/
    SSLEngine on
</VirtualHost>

<VirtualHost *:443>
    ServerName my_server.example.com
    SSLEngine on
    ...real site config...
</VirtualHost>

Это не просто доступ по цифровому IP-адресу, который вы обычно хотите перенаправить на свое каноническое имя хоста, а все адреса, кроме известных доменов, которыми вы управляете. Если в конфигурации сначала указать виртуальный хост по умолчанию, то он перенаправляет (или не обслуживает ничего) помогает избежать определенных атак XSS на основе DNS.

1 голос
/ 22 мая 2011

Я нашел следующее решение:

<Location />
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^my_server\.example\.com [NC]
    RewriteRule (.*) https://my_server.example.com%{REQUEST_URI} [R=301,L]
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://my_server.example.com%{REQUEST_URI}
</Location>

оно делает именно то, что мне нужно.

...