Я пытаюсь получить перенаправление, которое не удается, и по какой-то причине я не могу думать сегодня. У меня есть файл vHost в HTTPD, который прослушивает стандартный порт 80 и порт 443. Я пытаюсь перенаправить https://domain.com/(. *) в https://www.domain.com/$ 1, чтобы URL-адрес оставался неизменным.
Моя конфигурация выглядит следующим образом:
ServerName www.domain.com
ServerAlias tempdomain.testdomain.co.uk
ServerAlias domain.com
Мое правило перезаписи, которое я использую, -.
RewriteCond% {HTTP_HOST} ^ домен \ .com $
RewriteRule ^ (. *) $ https://www.domain.com1 доллар США [R = 301, L]
Я также пробовал удалить \. и $, но ничего .. Когда я посещаю URL https://domain.com/secure.page?action=comp это не перенаправляет на https://www.domain.com/secure.page?action=comp У меня также есть другие страницы SSL, приведенное выше было просто примером ..
Кто-нибудь может указать на мою глупость.
Я не вижу ничего плохого в вашем правиле перезаписи. Ты уверен :
RewriteEngine on
был указан и этот конфиг определенно выполняется? Это в файле .htaccess?
Попробуйте настроить журнал перезаписи, он может помочь:
http://www.latenightpc.com/blog/archives/2007/09/05/a-couple-ways-to-debug-mod_rewrite
это все что тебе нужно
RewriteCond %{HTTP_HOST} ^domain\.com
RewriteRule ^(.*)$ https://www.domain.com$1 [R=permanent,L]
это правило определенно работает для меня в Apache 2.2
Помимо использования перезаписи, пожалуйста, включите HTTP Strict Transport Security. Это просто и помогает защитить посетителей от атак типа "злоумышленник посередине".
# load module (example using [RHEL])
LoadModule headers_module modules/mod_headers.so
# Use HTTP Strict Transport Security to force client to use secure connections only
Header set Strict-Transport-Security "max-age=86400"
Header append Strict-Transport-Security includeSubDomains
Я думаю, что вам не хватает строки «RewriteEngine On» в вашей конфигурации. Вот пример того, как все это выглядит:
ServerName www.domain.com
ServerAlias tempdomain.testdomain.co.uk
ServerAlias domain.com
RewriteEngine On
RewriteRule /.* https://www.domain.com/ [R]
Спасибо и надеюсь, что это сработает, RayQuang
Попробуйте включить RewriteLog и посмотрите, показывает ли он, в чем заключается ошибка. В твоем httpd.conf
файл (или в вашем <VirtualHost>
директива) добавьте следующее:
RewriteLog "/path/to/some/file.log"
RewriteLogLevel 9
НЕ ХРАНИТЕ ТАК ТАК !!!!!! RewriteLogLevel 9
является очень медленный, поэтому его не следует использовать так в продакшене, только для тестирования. Но включите это (и, конечно, перезагрузите Apache) и проверьте файл журнала, чтобы узнать, что происходит, когда вы переходите в https://domain.com/secure.page?action=comp
.
Если вы все еще не уверены в проблеме, отредактируйте свой вопрос и опубликуйте соответствующие части в журнале перезаписи.