我有以下設置。帶有負載平衡器的彈性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配置文件中,但我不知道該怎麼做。我一直在拼湊幾個解決方案,例如this和this幾天,每個解決方案都會產生另一個問題。
對於任何人建議Wordpress應該也是https,我不反對,但是我已經走了一個多星期的路,沒有好的解決方案,讓我維持非ssl測試和開發可以正常部署到AWS的環境,而無需繁瑣的插件,生產過程中發生更改的文件,我無法輕鬆地返回到測試和開發,以及其他https/wordpress問題的主機。最簡單的解決方案似乎正在運行Wordpress http。我也打開另一個CMS來取代Wordpress。底線是我只想讓一個博客在AWS的CI上生活,在https/http中,一起玩,並且輕鬆部署。
還應該指出,在開發和測試,一切工作正常。開發和測試之間唯一重要的區別是.ebextensions文件和https重定向。
任何幫助表示讚賞。