2010-01-07 53 views
10

截至目前我的網站有幾個靜態頁面,其中之一是/投資組合。除此之外,我的htaccess隱藏了.html擴展名。我想添加一個投資組合目錄,但我不想將現有投資組合頁面作爲默認索引文件移動到投資組合目錄中。我的/投資組合頁面是我的Google附加鏈接之一,我擔心如果它被移動或者網址發生變化,Google會認爲它是一個全新的頁面。.htaccess,正確重寫目錄和文件同名

我的問題是,一旦我添加/ portfolio /目錄,每當我嘗試訪問原始/投資組合頁面時,會自動添加尾部斜槓並鏈接到目錄本身。

我試過了無數的選擇,其中一個是/ portfolio/to/portfolio的重寫,但是這會創建一個無限循環。我也嘗試過「DirectorySlash Off」,但是它只能在目錄內刪除尾部的斜槓,並沒有恢復到原始/投資組合頁面的訪問。

最終,我想保留我的/投資組合頁面,鏈接到目錄內部的頁面,如/ portfolio/example,如果/ portfolio或/ portfolio /被訪問,它將導致顯示相同的頁面如果沒有Google認爲它是重複的內容,它就在目錄之外。

類似的問題存在的位置: .htaccess rewriting url to page or directory雖然這仍然導致了我無限循環出於某種原因,我猜它是與隱藏的擴展。

這裏是我的htaccess-

 
RewriteEngine On 

# HTML to PHP 
RemoveHandler .html .htm 
AddType application/x-httpd-php .htm .html 

# Hide extension 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

# Force WWW 
RewriteCond %{HTTP_HOST} ^mydomain\.net 
RewriteRule ^(.*)$ http://www.mydomain.net/$1 [R=301,L] 

# Blog Subdomain 
RewriteCond %{HTTP_HOST} ^blog.mydomain.net$ 
RewriteRule ^(.*)$ http://www.mydomain.net/blog/$1 [R=301,L] 

我知道這是不是具有相同名稱的目錄作爲靜態頁面一個偉大的想法,但我真的寧願不改變現有的頁面,並失去了谷歌網站連結,所以一個乾淨和適當的方式來處理這將是一個幫助。

回答

13

這裏有兩件事「錯誤」,有兩種解決方法。

首先是apache在應用重寫條件之前「計算出」有一個名爲「portfolio」的目錄。這意味着重寫條件正在接收「投資組合/」而不是「投資組合」。

其次,規則是專門避免你想,如果有,其實是一個目錄由該名稱的重寫

解決方案1「-d!」:手動重新路由的投資組合目錄請求刪除斜槓。

# Manually re-route portfolio/ requests to portfolio 
RewriteCond %{REQUEST_FILENAME} portfolio/$ 
RewriteRule ^(.*)/$ $1 

# Hide extension 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

請注意刪除「!-d」條件。

這樣做的缺點是,你是直接進行硬編碼的「組合」邊緣情況到重寫規則,並且仍然會導致瀏覽器首先被重定向到投資組合/

解決方案2:設置DirectorySlash關閉並刪除目錄存在測試

# Disable Automatic Directory detection 
DirectorySlash Off 

# Hide extension 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html 

設置DirectorySlash關會解決這個問題最好的,但可能會破壞你的網站的其他部分,你真正想要的汽車DirectorySlash。最好的運氣,我希望這有助於。

請注意,在測試解決方案2時,瀏覽器可能會記得將「投資組合」重定向到「投資組合/」,並在將請求發送到服務器之前執行重定向。請務必在緩存清晰乾淨的環境中進行測試以獲得最佳效果。

+0

雅知道,我已經試過了。我嘗試刪除該行並刪除!,結果沒有任何變化。 我會注意到,我正在使用xampp進行測試。到目前爲止,我只注意到我需要清除緩存並重新啓動瀏覽器以使一些更改生效,但我不確定這是否會導致解決方案無法工作。 – PaulC 2010-01-07 02:21:32

+0

嗯,我猜測我的情況沒有任何真正的解決方案。我幾乎無視這個問題,直到我去上傳我的新網站時遇到了這個問題。希望那時我能弄清楚什麼。儘管感謝您的幫助。 – PaulC 2010-01-08 15:01:28

+0

在我自己的環境中進行了一些測試之後,我編輯了我的答案,以顯示您擁有的選項。 – 2010-01-08 18:33:24