2013-10-17 62 views
0

希望有更多htaccess經驗的人可以幫助我們解決這個問題。我們有Drupal 7站點,我們剛剛從一個開發人員移動到現場主機(不同的託管公司)。但是,現在當有人將沒有協議的網址直接放入地址欄(例如:examplesite.com/members)時,頁面會重定向到example.com/index.php。我一直在試圖在htaccess文件中解決這個問題,但一直無法找到合適的語法來允許沒有協議的網址,同時也強制https://。無協議時重定向到index.php的URL

我們的代碼:

RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !=/favicon.ico 
    RewriteRule^index.php [L] 


    RewriteEngine On 
    RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

我們試圖移動重寫規則^的index.php [L]線下的所有規則,或評論出來。這固定了最初的問題,但打破了後端的drupal管理功能(無法看到管理菜單,無法保存任何內容等)

任何洞察將有所幫助,請告訴我是否需要更多信息。先謝謝你。

+0

您是否在RewriteRule而不是'%{REQUEST_URI}'中使用了'/ $ 1'? (如果您還想保留任何可能的查詢字符串,請添加標誌QSA。) – CBroe

+0

您的網址是什麼意思,沒有協議?當你在你的瀏覽器中鍵入'examplesite.com/members'時,瀏覽器實際上會向Web服務器發送'http:// examplesite.com/members'。 – anubhava

回答

0

您需要將整個塊,條件+規則移動到底部。 Drupal通過index.php腳本路由所有內容,並且它需要先前的3個條件才能正確執行。如果您只是移動RewriteRule一行,那麼條件全部消失。

RewriteEngine On 

# this needs to come first 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

# then drupal stuff comes LAST 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteRule^index.php [L]