2016-01-19 78 views
0

我們有一個網站,其中內容由CMS生成。問題在於人們在沒有http://的情況下向其網站添加鏈接,因此所有鏈接都以錯誤的方式生成。htaccess根據網址中的字符串重定向到域

爲如:http://www.example.com/ec/shefaliaxena/eventupdate/www.shefalisaxena.com

我想要做的是最後一個斜線後得到的數據,並檢查它是否是使用正則表達式有效的域,如果它是有效的域,然後將它重定向到該域或其他什麼都不做。

我能夠使用正則表達式([^/]+$)在最後一個斜槓後提取數據,但想知道如何實現此重定向。

我可以很容易地做到這一點與編碼,但我想從.htaccess文件本身,以便它不會增加服務器的負擔。

+0

你試過這個明顯嗎? 'RewriteRule([^ /] +)$ http:// $ 1/[L,NC,R = 301]' –

+0

感謝您的評論,我確實嘗試過,但此規則重定向了所有請求,我只想僅重定向這些請求在最後一個斜槓之後,如果有一個有效的域。如果它不是一個有效的域名,那麼它應該簡單地前進,不應該做任何事情。 – Raees

+1

您需要確定使用哪些類型的域以便爲其創建良好的表達式。也就是說,你如何在瀏覽器中輸出網站的URL?你總是可以做某種檢查來查看'http://'是否存在,如果不存在,在顯示頁面上的URL之前添加它。這樣做可能是最好的,因爲你根本不需要重定向。 –

回答

0

您可能會遇到的一個問題是,有效的文件名通常看起來很像有效的域名,所以您需要確保在嘗試之前看起來像域名的東西不是有效的文件轉發URL:

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule /(([A-Za-z0-9-]+\.)+[A-Za-z]{2,6})$ http://$1/ [L,NC,R=301] 

如果您正在生成的數據從用戶輸入的網址,我肯定會看看添加的協議了,而不是做這種方式。

+0

感謝凱文真的幫助和排序我的問題。榮譽給你。 – Raees