2017-04-03 58 views
0

我想用的.htaccess重定向我的網頁。對於所有的請求,我想重定向到http到https。但是如果URL包含子字符串api,我不希望重定向。我嘗試過,但總是重定向到https。的.htaccess重定向澄清

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    RewriteCond %{SERVER_PORT} ^80$ 
    RewriteCond %{REQUEST_URI} api 
    RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 
+0

您確定您的規則將所有請求重定向到https嗎? – starkeen

+0

對我而言,只有在uri中存在** api **時纔會重定向。 – starkeen

+0

其重定向所有網址。對於給定的條件沒有任何效果 –

回答

1

使用此而不是在URI串 'API' 的任何地方:

RewriteEngine On 

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} !api 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

,並改變它這樣,如果你只想排除像」呼叫.../API/... '

RewriteEngine On 

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} !\/api\/ 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
+0

不幸的是,所有的網址都被重定向到https。 「RewriteCond%{REQUEST_URI}!/ api /」不起作用。 –

+0

PLZ再次嘗試新的,有蒙面「/」,如果仍然不這樣做我會假設改寫爲HTTPS是從別的地方來的工作。因爲這個規則絕對只在子字符串「api」不在被重寫的URI中時才起作用。所以example.com/path/for/test應該被重寫爲https,而example.com/path/to/api/test不應該 –