2016-09-23 160 views
1

我有以下設置。帶有負載平衡器的彈性Beanstalk環境。安裝在根中的Web應用程序使用CodeIgniter。 Wordpress安裝在根目錄下的子目錄/博客中。 CodeIgniter應用程序需要https,但wordpress需要是http。負載均衡器配置爲偵聽https和http,負載均衡器後面的實例爲http。CodeIgniter與Wordpress,https與http,AWS與負載平衡器,Wordpress永久鏈接不工作

我的第一個配置來管理這是根.ebextensions文件。該文件與應用程序一起部署以設置.conf以將所有http流量重定向到https EXCEPT/blog。該文件看起來像這樣

files: 
    "/etc/httpd/conf.d/ssl_rewrite.conf": 
     mode: "000644" 
     owner: root 
     group: root 
     content: | 
      RewriteEngine On 
      <If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'"> 
      RewriteCond %{REQUEST_URI} !^/blog/ 
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 
      </If> 

配置的下一步是根中的.htaccess文件。這控制着CI請求。它看起來像這樣:

<FilesMatch "\.(ttf|otf|eot|woff|woff2|svg)$"> 
    <IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin "*" 
    </IfModule> 
</FilesMatch> 

RewriteEngine on 
RewriteBase/
RewriteCond $1 !^(index\.php|uploads|blog|assets|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 
Options -Indexes 

最後在/博客目錄包含WordPress的我有這樣的.htaccess

RewriteEngine On 
RewriteBase /blog/ 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /blog/index.php [L] 

的CI的應用程序工作正常,和HTTP請求正確發送到HTTPS。 /博客根目錄本身(即「主頁」,例如http://example.com/blog)也可以正常工作。即使/博客/子目錄,如http://example.com/blog/wp-admin/options-general.php工作正常。不起作用的是固定鏈接,例如http://example.com/blog/my-article(大概是因爲它們不是真正的文件)。如果我更改永久鏈接設置以刪除永久鏈接,並允許發佈網址看起來像這樣http://example.com/blog/?p=123也可以。只有永久鏈接不起作用。

一個額外的問題(這應該是顯而易見的)是,如果任何人試圖直接訪問https博客,他們會得到一個混合內容警告和斷開的鏈接。所以我還需要將https://example.com/blog/ *重定向回http。

我確定這個設置過於複雜,我可以刪除這兩個.htaccess文件,並將所有設置放在.ebextensions配置文件中,但我不知道該怎麼做。我一直在拼湊幾個解決方案,例如thisthis幾天,每個解決方案都會產生另一個問題。

對於任何人建議Wordpress應該也是https,我不反對,但是我已經走了一個多星期的路,沒有好的解決方案,讓我維持非ssl測試和開發可以正常部署到AWS的環境,而無需繁瑣的插件,生產過程中發生更改的文件,我無法輕鬆地返回到測試和開發,以及其他https/wordpress問題的主機。最簡單的解決方案似乎正在運行Wordpress http。我也打開另一個CMS來取代Wordpress。底線是我只想讓一個博客在AWS的CI上生活,在https/http中,一起玩,並且輕鬆部署。

還應該指出,在開發和測試,一切工作正常。開發和測試之間唯一重要的區別是.ebextensions文件和https重定向。

任何幫助表示讚賞。

回答

0

就拿這個視頻一看: AWS solution 你需要使用正確的頭,這樣不會happend,特別是如果你的負載平衡器未使用的實例和負載平衡器之間的安全連接