Почему мой mod_rewrite не работает для HTTPS, например HTTP - PullRequest
2 голосов
/ 07 июня 2011

Прошу прощения за еще один из этих постов, но из того, что я могу сказать, мой вопрос отличается от преобладающего перенаправления http -> https там.

Я хочу

      redirect all http://www.mydomain.com traffic to https://www.mydomain.com/wiki

И

      redirect https://www.mydomain.com   to   https://www.mydomain.com/wiki

Обратите внимание на https в моей первой цели перенаправления.

Для первого перенаправления я могу выполнить это, набрав:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*) https://%{SERVER_NAME}/wiki [R,L]

В моем httpd.conf файле и перезапуске.

Я думал, что это также сработает для моих попыток https: //. Обратите внимание, я не включаю

RewriteCond %{HTTPS} !=on

или что-нибудь в этом роде. И все же https://www.mydomain.com отправляет меня в мой файл index.html в корне моего сервера.

Если я попытаюсь поместить вышеуказанные директивы Rewrite в мой файл httpd-ssl.conf и перезапустить сервер, то я получу бесконечные перенаправления.

Что я делаю не так?

ПРИМЕЧАНИЕ: Что бы ни стоило, / wiki является псевдонимом / home / Users / myusername / www / wiki (абсолютный путь к вики)

UPDATE

Перефразировать то, что я пробовал до сих пор:

Попытка 1:

В httpd.conf:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*) https://%{SERVER_NAME}/wiki [R,L]

В httpd-ssl.conf:

Ничего не переписано

Результат 1:

Перенаправляет весь трафик http на https://www.mydomain.com/wiki Ничего не делает для https://www.mydomain.com

Попытка 2:

В httpd.conf:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*) https://%{SERVER_NAME}/wiki [R,L]

В httpd-ssl.conf:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*) https://%{SERVER_NAME}/wiki [R,L]

Результат 2:

Бесконечные перенаправления.

Попытка 3:

В httpd.conf:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule !^wiki https://%{SERVER_NAME}/wiki [R,L]

В httpd-ssl.conf:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule !^wiki https://%{SERVER_NAME}/wiki [R,L]

Результат 3:

Бесконечные перенаправления.

Ответы [ 3 ]

1 голос
/ 07 июня 2011

Бесконечные перенаправления происходят из-за того, что правило соответствует как первому клиентскому запросу (например, http: //...), Так и любому последующему запросу.

Лучше использовать правило перезаписи, которое исключает путь вики из совпадения, например,

RewriteRule !^wiki https://%{HTTP_HOST}/wiki [R,L]

или вы можете получить лучшую производительность от RewriteCond

RewriteCond %{REQUEST_URI} !^wiki

до вашего существующего правила. Это облегчит добавление более сложных шаблонов, которые у вас есть в вашем примере (если вам понадобится позже в вашем проекте).

1 голос
/ 07 июня 2011

Ваше правило будет соответствовать каждому запросу (даже /wiki).Попробуйте исключить это:

RewriteRule !^wiki https://%{HTTP_HOST}/wiki [R,L]
0 голосов
/ 07 июня 2011

Я нашел решение, которое может быть не самым надежным, но оно работает для меня.

В моем файле httpd-ssl.conf в контейнере VirtualHost я установил DocumentRoot, чтобы он указывал на каталогЯ пытался перенаправить на.

<VirtualHost _default_:443>
DocumentRoot "path on my HD where I wanted to redirect all along"
ServerName    All the usual stuff...
...

Это заботится о "перенаправлениях" (больше не перенаправляет) для транзакций https

Для http (не-ssl) я поместилhttpd.conf:

RewriteEngine On
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*) https://%{SERVER_NAME}/wiki [R,L]

Это, похоже, делает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...