所以凡是使用linux的主機,我都會定義個301重新導向,以利於SEO。昨天照例把htaccess傳到伺服器上,沒想到傳上後網站無法訪問,一刪除就恢複正常。看了很多遍代碼,也沒發現什麼問題。 乾脆就重新學習下URL重寫方法。
正常化URL
描述:
在有些web伺服器上,一個資源會擁有多個URL。在實際應用和發布中應該使用的是規範的URL,其他的則是簡寫或者只在內部使用。無論使用者在請求中使用什麼形式的URL,最終看見的都應該是規範的URL。
解決方案:
對所有不規範的URL執行一個外部HTTP重新導向,以改變它在瀏覽器地址欄中的顯示及其後繼請求。下例中的規則集用規範的/u/user替換/~user,並修正了/u/user所遺漏的尾碼斜杠。
RewriteRule ^/~([^/]+)/?(.*) /u/$1/$2 [R]
RewriteRule ^/([uge])/([^/]+)$ /$1/$2/ [R]
正常化主機名稱
描述:
這個規則的目的是強制使用特定的主機名稱以代替其他名字。比如,你想強制使用www.example.com代替example.com,就可以在以下方案的基礎上進行修改:
解決方案:
對運行在非80連接埠的網站
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://fully.qualified.domain.name:%{SERVER_PORT}/$1 [L,R]
對運行在80連接埠的網站
RewriteCond %{HTTP_HOST} !^fully\.qualified\.domain\.name [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://fully.qualified.domain.name/$1 [L,R]
參考了上面的規則,發現自己原先的代碼裡少了個!號,加上就恢複正常了。
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} !^do-javascript.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://www.do-javascript.com/$1 [r=301,nc]