2017-06-15 93 views
0

我在生產Laravel網站時,到index.php,這裏是我的問題有4個簡單的URL測試說明:如何避免重定向試圖訪問非WWW網址

這最後一次測試它的人,我不能修復,這是很煩人的。當我訪問沒有www的子頁面時;如果唯一的解決方案是重新定向到主頁,但至少沒有index.php這是可以的,這對SEO來說很糟糕。

我知道這些關於htaccess的問題已經被回答了很多次,但我失去了希望......即使是我的專用服務器的技術支持也無法正確回答我的問題。

我目前有兩個htaccess文件;一個坐落在我的public_html根/具有以下內容:

RewriteEngine On 

RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

RewriteCond %{HTTP_HOST} ^domain\.kr [NC] 
RewriteRule ^(.*)$ https://www.domain.co.kr/$1 [L,R=301,NC] 

RewriteCond %{HTTP_HOST} ^domain\.co\.kr [NC] 
RewriteRule ^(.*)$ https://www.domain.co.kr/$1 [L,R=301,NC] 

RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

而另一個public_html下/公衆默認的Laravel的htaccess的內容:

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

    RewriteEngine On 

    # Redirect Trailing Slashes If Not A Folder... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 

    # Handle Authorization Header 
    RewriteCond %{HTTP:Authorization} . 
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

</IfModule> 

你可能會問我爲什麼有我兩個htaccess在兩個不同的位置。我也想知道。事情是我已經做了很多測試,並且我發現將www/https規則直接放在根文件夾類型上效果更好。但我可能是錯的。

再次抱歉,如果這個問題已被問及百萬次,但我找不到適合我的答案。

在此先感謝您的任何幫助。

回答

1

.htaccess文件處理所有的重定向(www或不,https或不),是過度工程。

好像最終域應始終www.domain.co.kr + SSL因此沒有必要使用%{HTTP_HOST}爲最終域不是動態的,或者說%{HTTPS}s ^on(s)匹配提取s與否。

訂單是正確的tho:始終在框架重寫之前,完成所有基本重定向/ http(s)之前的

因爲你在父文件夾中這樣做,所以沒關係。您可以將這些規則放在同一個.htaccess文件中,但您必須在之前將它們放在之前。

我會簡化它開始:

RewriteEngine On 

# Redirect http to https 
RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA] 

# Redirect non-www to www 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule (.*) https://www.domain.co.kr/$1 [R=301,L,QSA] 

你會注意到我還添加了QSA傳遞國旗,你可能在原請求的任何查詢字符串。

看看你是如何去那裏。

此外,請確保您每次嘗試新內容時總是清空瀏覽器緩存,因爲重定向的緩存區域爲

如果仍然沒有工作,你可以在你的Apache配置更改日誌級別,檢查:http://httpd.apache.org/docs/current/mod/mod_rewrite.html#logging

您可以調試過程中重定向/重寫,一步一步發生了什麼,以針點實際問題在哪裏。

+0

感謝您的回答@膠囊,它看起來像我沒有得到這討厭的index.php了,這是偉大的,因爲這是一個大問題。但是,似乎www重定向不起作用。我嘗試了關於mod_rewrite日誌的建議,但我不確定我應該尋找什麼。但我會繼續研究它。自從我最大的擔憂消失後,我可能會將您的答案標記爲已解決。 – Valentincognito

+0

奇怪,因爲你不能真正變得更簡單,第二條規則,這是應該照顧非www到www重定向。很高興收到您有關任何進一步調查結果的回覆。 – Capsule

+1

好吧,最後我認爲最好把這兩條規則放在框架的公共文件夾的htaccess中,但作爲你提到的第一條規則。奇怪,因爲public_html根目錄下的htaccess似乎起初工作。也許我已經在我做過的很多測試中迷失了......無論如何現在都好,非常感謝你! – Valentincognito