2016-03-23 5 views
0

Я домен, который использует 2 отдельных VirtualHost файлов: один для: 80 и один для: 443Apache2 переписывать правила не подхватили

The: установка 80 довольно легко, это только работа для перенаправления до: 443:

<VirtualHost *:80> 
    # This is the first host so it's the default. 
    # So although I've specified a ServerName and ServerAlias anything else not specified elsewhere will also end up here. 
    ServerName www.domain.com 
    ServerAlias domain.com 

    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

    # Redirect everything to https: 
    RewriteEngine on 
    RewriteRule ^(.*)$ https://www.domain.com$1 [R=301,L] 
</VirtualHost> 

The: 443 просто нужно добавить WWW в начале URL, если он отсутствовал:

<VirtualHost *:443> 
    # This is the first host so it's the default. 
    # So although I've specified a ServerName and ServerAlias anything else not specified elsewhere will also end up here. 
    ServerName www.domain.com 
    ServerAlias domain.com 

    ErrorLog ${APACHE_LOG_DIR}/ssl.error.log 
    CustomLog ${APACHE_LOG_DIR}/ssl.access.log combined 

    # Redirect everything which is not already on the real www domain name to that: 
    RewriteEngine on 
    RewriteCond %{HTTP_HOST} !www.domain.com 
    RewriteRule ^(.*)$ https://www.domain.com$1 [R=301] 

    ErrorDocument 404 /404.html 
</VirtualHost> 

Я 1 случай, в котором эти Перезапись, кажется, не в состоянии:

https://domain.com -> должен указывать на https://www.domain.com, но он указывает на https://www.domain.com%24/#. Очевидно, что символы на задней панели не позволяют DNS-серверу найти домен.

В чем причина этой проблемы? Я уже помог создать эти файлы virtualhosts, но кажется, что они все еще не работают должным образом.

НО Я также хочу переписать свои URL-адреса на более приятные. Я думаю, что мое правило является правильным и блок Rewrite в: 443 выглядит следующим образом

RewriteEngine on 
RewriteCond %{HTTP_HOST} !www.domain.com 
RewriteRule ^(.*)$ https://www.domain.com$1 [R=301] 

RewriteRule ^subpage/(.+)/?$ subpage.html?$1 [NC] 

Который должен переписать

https://www.domain.com/subpage/2 ->https://www.domain.com/subpage.html?2, но это просто указывая на мой 404-файл Теперь.

Это может быть что-то очевидное, но я не вижу своей ошибки.

ответ

0

ПРИМЕЧАНИЕ. Это не решает проблему, как указано здесь, но она решает основную проблему.

Поскольку это производственная среда (как неловко), мой веб-сервер, который был довольно слаб, чтобы начать с него, быстро затоплялся. Моя компания значительно увеличила мой бюджет (мы ожидали много трафика, но надеялись, что он будет медленно наращиваться, а это не так), поэтому я смог настроить несколько серверов и разместить перед ними два HAProxy loadbalancers. Я использовал HAproxy конфигурацию, чтобы решить свои проблемы с помощью:

frontend http 
    bind MY_IP:80 
    redirect prefix http://www.domain.com code 301 if { hdr(host) -i domain.com } 
    redirect scheme https code 301 if !{ ssl_fc } 

frontend https 
    bind MY_IP:443 ssl crt /etc/haproxy/certs/domain.com.pem 
    redirect prefix https://www.domain.com code 301 if { hdr(host) -i domain.com } 
    reqadd X-Forwarded-Proto:\ https 
    default_backend app_pool 

backend app_pool 
    balance roundrobin 
    redirect scheme https if !{ ssl_fc } 
    server app-1 MY_IP:80 check 
    server app-2 MY_IP:80 check 
    server app-3 MY_IP:80 check 
    server app-4 MY_IP:80 check 

, который всегда будет перенаправлять версии www.domain.com и применять HTTPS, а также. Настройка этого в HAProxy намного проще, чем использование VirtualHost, на мой взгляд.

Смежные вопросы