2016-08-25 92 views
0

我在Apache 2.4.7問題HTTP重定向到HTTPS

我想與https的網站: http://example.com轉發到https://example.com

注意,這個URL沒有尾隨斜線!

http://example.com/whatever轉發給https://example.com/whatever/

注意,此網址的斜線!

目前,我有以下幾點:

<VirtualHost *:80> 
    ServerName example.com 
    ServerAlias *.example.com 
    Redirect/https://example.com 
</VirtualHost> 

<VirtualHost *:443> 
    ServerName example.com 
    ServerAlias *.example.com 

    ServerAdmin [email protected] 
    DocumentRoot /var/www/example.com/ 

    SSLEngine on 
    SSLCertificateKeyFile /etc/ssl/ssl.key/example.com.key 
    SSLCertificateFile /etc/ssl/ssl.crt/example.com.crt 
    SSLCertificateChainFile /etc/ssl/ssl.crt/example.com.ca-bundle 

    <Directory /var/www/example.com/> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Order allow,deny 
     Allow from all 
    </Directory> 

    ErrorLog ${APACHE_LOG_DIR}/example-error.log 
    CustomLog ${APACHE_LOG_DIR}/example-access.log combined 

</VirtualHost> 

以上前鋒http://example.comhttps://example.com正確。

不幸的是上面還轉發:

http://example.com/foo/barhttps://example.comfoo/bar而不是https://example.com/foo/bar/

+1

你說你要'HTTP重定向:// example.com/whatever'到'的https:// example.com /不管/'後來你說'HTTP: //example.com/foo/bar'應該重定向到'https:// example.com/foo/bar'。如果在原始請求中不存在追加的斜槓,是否需要添加? –

+0

好的。固定! –

回答

1

嘗試以下操作:

Redirect/https://example.com 
RedirectMatch ^(/.+)$ https://example.com$1/ 

當前的重定向將只匹配了主頁,我想,這樣不知道你爲什麼重定向爲/ foo/bar

此外,如果這q題目了,真是關於Apache 2.4,你讓語法應爲Require all granted代替 正如你應該更換:

Order allow,deny 
Allow from all 

更多信息,請參見https://httpd.apache.org/docs/2.4/upgrading.html

+0

我應該用「要求所有被授予的」替換,爲什麼? –

+0

這工作正常,但是這會將'http:// example.com/whatever'轉發給'https:// example.com/whatever',而不是'https:// example.com/whatever /'(即跟蹤結尾 –

+0

@Yahya Uddin我已經更新了我的答案:) – jedifans

0

使用重寫引擎。我有這樣的片段:

RewriteEngine on 
RewriteCond %{HTTPS} !=on 
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] 
+0

這會將'http:// example.com'轉發給'https:// example.com /'NOT 'https:// example.com'(即沒有結尾的斜線)。另外我認爲檢查HTTPS條件不是必需的,否則它將通過端口443連接。 –