Назад | Перейти на главную страницу

Apache mod_rewrite по-разному работает с конфигурациями SSL и без SSL

У меня есть система, в которой я размещаю на своем сервере несколько SSL-сайтов. Мне также нужно настроить OAuth для каждого домена, в частности для Google и Yahoo. Каждый из них требует, чтобы файлы проверки были установлены на сервере, чтобы подтвердить право собственности. Таких файлов сейчас так много, что они засоряют мой корневой каталог. Итак, я хочу настроить правило перезаписи для отправки запроса на определенный URL-адрес в каталог файла проверки, например:

RewriteRule (^/googlew*.html$) /verifications$1

При этом отправляется запрос файла подтверждения Google, например http: //server/google27c81d94580e55dd.html к http: //server/verifications/google27c81d94580e55dd.html, и без перезаписи URL-адреса все работает нормально.

Но когда запрос идет на URL-адрес SSL, он терпит неудачу. Вот моя конфигурация:

<VirtualHost *:80>
            ServerName <domain>
            DocumentRoot /www/public
            RewriteEngine On
            RewriteRule (^/googlew*.html$) /verifications$1 [R]
            RewriteRule (^.*--.html$) /verifications$1 [R]
</VirtualHost>

<VirtualHost <ipaddress>:443>
            SSLEngine On
            ServerName <domain>
            DocumentRoot /www/public
            RackEnv production
            RewriteEngine On
            RewriteRule (^/googlew*.html$) /verifications$1 [R]
            RewriteRule (^.*--.html$) /verifications$1
            SSLProtocol all
            SSLCipherSuite HIGH:MEDIUM
            SSLCertificateChainFile /usr/share/ssl/crt/intermediate.crt
            SSLCertificateFile /usr/share/ssl/crt/<domain>/<domain>.crt
            SSLCertificateKeyFile /usr/share/ssl/crt/<domain>/<domain>.key
</VirtualHost>

Поэтому, когда запрос является небезопасным HTTP, он работает нормально. Когда это защищенный HTTPS, он не работает. Любые предложения относительно того, почему?

ОБНОВИТЬ В соответствии с запросом, вот вывод журнала перезаписи на уровне 3:

init rewrite engine with requested uri /google27c81d94580e55dd.html
applying pattern '(^/googlew*.html$)' to uri '/google27c81d94580e55dd.html'
applying pattern '(^.*--.html$)' to uri '/google27c81d94580e55dd.html'
pass through /google27c81d94580e55dd.html

А теперь самое забавное: до того, как я написал свой исходный пост, небезопасная версия работала нормально. После того, как я разместил, незащищенная версия тоже перестала работать! Запись журнала, которую я только что вставил, - это то, что я получаю при запуске незащищенной версии. Лицо. Взрыв.

Несколько вещей:

  • Родителей не должно быть рядом с вами ^ и $.
  • Вы, наверное, имели в виду \w*, вместо того w*; который будет соответствовать этим символам.
  • Убедитесь, что вы избегаете специальных символов

Итак, попробуйте это:

RewriteRule ^(/google\w*\.html)$ /verifications$1 [R]

Я не следую цели вашего второго правила; можешь уточнить?