2013-02-09 158 views
0

我想創建我的第一個.htaccess使URL重寫和其他的東西,但我浪費了兩天的搜索信息,並試圖使它沒有成功。htaccess文件重定向非www和https請求,並重寫URL

我想什麼來實現如下:

1)所有非www網址重定向到WWW網址(似乎對SEO最佳實踐)

domain.com --> www.domain.com 

2)重定向所有HTTPS請求到http的:

https://www.domain.com --> http://www.domain.com 
https://domain.com  --> http://www.domain.com 

3)重寫我的網址是搜索引擎友好,並最終在地址的末端剝去任何尾隨斜線:

www.domain.com/abc --> www.domain.com/index.php?page=abc 
www.domain.com/abc/ --> www.domain.com/abc 


我有什麼事這麼遠,是其採取單獨3段工作:

# 1) This should be correct, I hope! 
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 


# 2) This seems to work 100% right 
RewriteEngine On 
RewriteCond %{HTTPS} =on 
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L] 


#3) Major issues here 
RewriteEngine On 
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L] 

此工程部分:它做我想要什麼,但我得到當我把尾隨斜線的搜索引擎友好的URL畢竟相對路徑細分:

www.domain.com/abc  OK 
www.domain.com/abc/  page gets displayed but all relative URL for css and images are broken 


我甚至不知道如何將單個htaccess文件中的不同規則結合起來,以使它們正確交互。

對不起,長期的解釋,這個問題對我來說變得相當令人沮喪。

回答

2

與css文件或圖像的相對路徑的問題當然是位於尾部的斜線。瀏覽器會認爲他是一個子文件夾的附加相對pathes的CSS文件到您的當前位置,這將導致

www.domain.com/abc/styles/style.css 

,而不是

www.domain.com/styles/style.css 

有兩種方法,來解決這個:

  1. 我的首選解決方案是使所有的路徑在html絕對。
  2. 重定向到相同的路徑而沒有結尾的斜槓。既然你似乎忽略了斜線,這應該沒有副作用。匹配規則是這樣的

    RewriteRule ^([^/\.]+)/?$ http://%{HTTP_HOST}$1 [R=301,L] 
    

你完全htaccess的文件將是這樣一個:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

RewriteCond %{HTTPS} =on 
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

RewriteRule ^([^/\.]+)/$ http://%{HTTP_HOST}$1 [R=301,L] 
RewriteRule ^([^/\.]+)$ index.php?page=$1 [L] 
+0

謝謝您的答覆。這裏有一個缺少的斜線'RewriteRule ^([^/\。] +)/ $ http://%{HTTP_HOST}/$ 1 [R = 301,L]'但這是一個簡單的修復。不幸的是,https重定向不會發生,如果我把'https:// domain.com/abc /' – Eggplant 2013-02-09 11:00:49

+0

的東西抱歉,我的壞。這是我虛擬服務器的一個愚蠢的錯誤配置。它工作100%完美,非常感謝,現在這些htaccess文件對我來說似乎更容易理解!再次感謝。 – Eggplant 2013-02-09 11:52:20

相關問題