Правила за пренаписване на Apache

Разбрах повече или по-малко основната конфигурация на Apache с насоките в ръководството на Apache, но правилата за пренасочване са малко сложни за мен в момента, така че се надявам, че можете да ми помогнете.

Искам да постигна следното:

  • Всяка входяща заявка през http трябва да бъде пренасочена към използване на https.
  • Всяка подмрежа, с изключение на тези, дефинирани като vhost (m.domain.tld и content.domain.tld), трябва да пренасочи към domain.tld.
  • Предпочитам да запазя всичко след "/", но това не е необходимо.

Например:

  • http:/domain.tld → https:/domain.tld
  • http:/whatever.domain.tld → https:/domain.tld
  • https:/whatever.domain.tld → https:/domain.tld
  • http:/m.domain.tld → https:/m.domain.tld

Разбрах основите, работещи с това много основно правило, но то работи само за заявка, идваща през http, така че несъществуващите подмрежи, идващи през https, не се преформатират.

<VirtualHost _default_:80>
    Redirect permanent / https://domain.tld/
</VirtualHost>

Надявам се, че можете да помогнете или да ме насочите към ясно ръководство (все още не съм го намерил).


person Bart Naus    schedule 07.12.2011    source източник
comment
Като начало: https се обслужва от порт, различен от http: 443 срещу 80 (обикновени номера на портове по подразбиране). Налагане на HTTPS - тонове такива теми вече са налични тук - просто потърсете. Същото за имената на поддомейни: търсене на канонично име на домейн. Няма проблем да ви дадем точни правила за вашия случай .. но тъй като този тип въпроси се задават почти всеки 2-ри ден или така, не би трябвало да имате проблеми с намирането на отговори тук. Потърсете ги и актуализирайте публикацията си с конкретни проблеми, които все още може да имате.   -  person LazyOne    schedule 08.12.2011
comment
Наистина съжалявам, мразя себе си, че съм от онези момчета, които никога не четат и винаги питат. Причината, поради която попитах, беше, че след няколко дни разглеждане на сайтове като stackoverflow не мога да се справя с правилата. Но експериментирам, докато пиша. Само малко се страхувам да направя набор от правила за копиране и поставяне с очевиден (защитен) пропуск. Разрешено ли е, когато имам работещ набор от правила, да ги поставя за преглед тук?   -  person Bart Naus    schedule 08.12.2011
comment
Ако ще бъде, моля, проверете това или какво не е наред тук, тогава НЕ. Ако това е това, което трябва да се направи; ето правилата; това работи, а това не -- може ли някой да помогне -- Да, тъй като ясно показвате, че работите върху това и имате нужда от малко помощ/тласък в правилната посока и т.н.   -  person LazyOne    schedule 08.12.2011


Отговори (1)


Опитайте тези mod_rewrite правила:

RewriteEngine On
Options +FollowSymLinks

# force HTTPS for m.example.com
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} =m.example.com
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# only allow m.example.com & example.com -- everything else gets redirected to https://example.com
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} !=m.example.com
RewriteCond %{HTTP_HOST} !=example.com
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]

# if still no HTTPS then force it (for any other subdomain)
RewriteCond %{HTTPS} !=on
RewriteRule .* https://example.com%{REQUEST_URI} [R=301,L]

# your other rewrite rules below

Имайте предвид, че за да можете да сървъра something.example.com ви трябва правилен SSL сертификат за този конкретен поддомейн или SSL сертификат със заместващ символ, който ще покрива ВСЕКИ поддомейн. Важно е, тъй като SSL частта от HTTPS работи много преди mod_rewrite да има шанс да направи каквото и да било (задейства се само когато защитената връзка вече е правилно установена).

person LazyOne    schedule 08.12.2011
comment
Благодаря за бързия отговор! SSL вече работи със сертификат със заместващ знак. Надявам се, че съм конфигурирал правилно виртуалния хост, но всичко изглежда работи. Поставих първото и последното правило във ‹VirtualHost default:80›, което сега е единственото съдържание на този vhost. Така че всички заявки се пренасочват към ‹VirtualHost default:443›, което включва DocumentRoot, сървърни сертификати и т.н. и аз добавих вашите две последни правила, така че заявката към странни поддомейни на https също да бъде преформатирана. - person Bart Naus; 08.12.2011