2013-05-30 42 views
1

我頭痛地嘗試在Apache中設置虛擬主機以使用codeigniter。如何刪除WWW前綴,添加https並重寫codeigniter mod_rewrite?

我想: - 刪除WWW(如果存在的話) - 重定向到HTTPS - 重寫請求頭重定向到笨解析

這裏是我到目前爲止的代碼:

  RewriteEngine on 
      RewriteBase/
      RewriteCond %{HTTPS} off 
      RewriteRule (.*) https://abc.com%{REQUEST_URI} [L] 
      RewriteCond %{HTTP_HOST} ^www\.(.+) [NC] 
      RewriteRule^http://%1%{REQUEST_URI} [L] 
      RewriteCond %{REQUEST_FILENAME} !-f 
      RewriteCond %{REQUEST_FILENAME} !-d 
      RewriteRule ^(.*)$ https://abc.com/index.php?q=$1 [L,QSA] 

但它根本不起作用;我在這裏做錯了什麼?

+0

只是小白打樣的問題;你確實在Apache中啓用了mod_rewrite嗎?當然是 –

+1

;)noob-proofed。 – Disco

回答

2

如果你拿三個獨立的部分,並一次做一個,你會發現只有一個不起作用?

強制使用HTTPS

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://abc.com%{REQUEST_URI} [L] 

首先,檢查 「關」 是對安裝是否正確。您可能有更好的運氣在你的服務器用於HTTPS

端口號
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule (.*) https://abc.com/$1 [L] 

力abc.com檢查,而不是www.abc.com

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC] 
RewriteRule^http://%1%{REQUEST_URI} [L] 

既然你已經硬編碼的域名在這個.htaccess中,你可以在RewriteRule這裏使用它,而不是%1。現在,如果您轉換爲https以上,無論您是否已經在https中,這是否會將您發回http?我也會用。而不是^,你真的想失去其餘的網址嗎?

RewriteCond %{HTTP_HOST} ^www\. [NC] 
RewriteRule ^(.*)$ https://abc.com/$1 [L] 

僞造的文件或目錄,翻轉到一個固定的URI

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ https://abc.com/index.php?q=$1 [L,QSA] 

這將追加任何現有的查詢字符串對於q =原始路徑/文件。沒有它,我認爲q = original會缺少舊的查詢字符串。

請注意,所有這些應該產生一個302代碼(等於[R = 302])。如果你想要一個301,你必須明確地給它([R = 301,L])。我不確定在什麼情況下,.htaccess中的多個R = 301會出現錯誤,因此您可能需要嘗試一下。

1

也許這個作品:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} (?:www\.)?(.+) [NC] 
RewriteRule ^(.*) https://%1/$1  [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !index\.php [NC] 
RewriteRule ^(.*) https://abc.com/index.php?q=$1 [R=301,L,QSA] 
+0

工程,除非我把https://www.abc.com/它停留在前綴www。 – Disco

相關問題