apache2.4 mod_rewrite виключає конкретний псевдонім directroy / uri


11

У мене є одна установка на одному з моїх привидів:

...<VirtualHost *:80>
    ServerName cloud.domain.de
    ServerAdmin webmaster@domain.de
    ServerSignature Off

    Alias "/.well-known/acme-challenge" "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge"

    <Directory "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge">
      Require all granted
      ForceType 'text/plain'
    </Directory>

    <ifmodule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %(REQUEST_URI) !/\.well\-known/acme\-challenge/?.*
      RewriteCond %{HTTPS} off
      # RewriteRule ^\.well-known/acme-challenge/([A-Za-z0-9-]+)/?$ - [L]
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </ifmodule>...

Що я хочу досягти, це те, що mod_rewrite не переписує URL при http://cloud.domain.de/.well-known/acme-challenge/зверненні до URL .

Я вже спробував різні підходи, один з яких - коментований RewriteRule вище, але, здається, нічого не працює: сервер щоразу переписує його на https.

Якщо я вимкніть перезапис для тестових цілей, я можу отримати доступ до URL-адреси псевдоніма просто чудово ...

Як домогтися, щоб певна URL-адреса не була переписана?

Відповіді:


16

Щось схоже на те :

<ifmodule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</ifmodule>

Якщо URI збігається, start with /.well-known/acme-challenge/запит не буде переспрямовано


По-перше, дякую за пораду! На жаль, це не спрацювало. Під час відвідування: http://www.server-plant.de/.well-known/acme-challenge/він все ще переписується. (Я застосував ті ж Правила перезапису для мого www-субдомену, тож це точно так само, як хмара-субдомен)
FleBeling

Відредаговано: був () замість {} і RewriteCond %{HTTPS} offне
вимагається

Так, я просто сліпо скопіював ваш, не перевіряючи правильні дужки, але добре, буває :) Зараз це працює як шарм, і ви також маєте рацію щодо інших умов. Залишилося лише одне запитання: як змінити умову, щоб також відповідати всьому, що стоїть за останнім /? Отже, він не вловлює index.html тощо?
FleBeling

воно вже відповідає start with /.well-known/acme-challenge/тому, що означає /.well-known/acme-challenge/anything, що переспрямування теж не буде
Froggiz

1
Конфігурації перезапису можуть бути успадковані всіма віртуальними хостами, RewriteOptions InheritDownпочинаючи з Apache 2.4.8. RewriteEngine Onмає бути присутнім у кожній конфігурації віртуального хоста.
tobltobs

3

@mark Правильна версія варіанту "коротший і надійніший":

RewriteCond %{REQUEST_URI} ^/\.well\-known
RewriteRule . - [L]

додавши це, щоб зупинити правила перенаправлення ssl нижче, ніж це приголомшливо
Джеймс Тан

Одинарна точка у другому рядку не працювала для мене. Це тому, що він відповідає лише одному знаку, а URL складається з кількох символів? Я замість цього використовую ^ (. *) $.
Jette

0

IMHO коротший і надійніший:

RewriteCond %{REQUEST_URI} ^\.well\-known
RewriteRule - [L]

ви можете додати / acme-challenge / з часом, але якщо ви хочете налагодити його з довільним файлом, наприклад ./well-known/test це рішення працює краще

що він насправді робить: дивиться, чи запит починається з. добре відомого, у цьому випадку нічого не робить (значення -) і робить його останньою нормою [L]


ніпе. Віртуальні хости все ще мають перевагу. "Розділи всередині розділів <VirtualHost> застосовуються після відповідних розділів за межами визначення віртуального хоста. Це дозволяє віртуальним хостам змінювати основну конфігурацію сервера." від httpd.apache.org/docs/current/sections.html
Фредерік Норд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.