2012-01-16 76 views
0

我有改變example.com/en/about/topicexample.com/en/view.php?p=pages/about/topic.phpSEO mod_rewrite的內部URL目錄問題

我的規則是的mod_rewrite規則:

重寫規則^ EN /(A-ZA-Z0-9 /] +) $ EN/view.php?p =頁/ $ 1.PHP

view.php有一個像菜單,標誌等所有我的執着的東西,它使用一個PHP包括獲得網頁/ topic.php

它適用於example.com/en/topic -> example.com/en/view.php?p=pages/topic.php但是當我嘗試example.com/en/about/topic -> example.com/en/view.php?p=pages/about/topic.php,發現view.phppages/about/topic.php並加載它們,但試圖從en/about/...加載所有我的CSS文件和圖片等,而不是en/...它這樣做是在這兩個view.php和topic.php圖片。最令人沮喪的是,如果我將[R]添加到規則中,一切正常,但它擊敗了SEO練習的目的!

我一直在這一整天,但沒有運氣。雖然我確實發現了mod_rewrite日誌記錄和幾個handyguides

這裏就是我的日誌說,對example.com/en/test(工作):

[perdir C:/ TT/XAMPP/htdocs中/]恩/測試「改寫 - > 」 en/view.php?p = pages/test.php'

[perdir C:/ tt/xampp/htdocs /] strip document_root prefix: C:/tt/xampp/htdocs/en/view.php - > /en/view.php

[perdir C:/ tt/xampp/htdocs /]內部重定向/en/view.php [內部重定向]

[perdir C:/ TT/XAMPP/htdocs中/]穿過 C:/tt/xampp/htdocs/en/view.php

[perdir C:/ TT/XAMPP/htdocs中/]通通過 C:/tt/xampp/htdocs/en/base/code/view.css

和example.com/en/about/test(不)

[perdir C:/ tt/xampp/htdocs /] rewrite'en/about/dir/test' - > 'en/view.php?p = pages/about/dir/test.php'

[perdir C:/ TT/XAMPP/htdocs中/]條的document_root前綴: C:/tt/xampp/htdocs/en/view.php - > /en/view.php

[perdirÇ :/ TT/XAMPP/htdocs中/]內部重定向與/en/view.php [INTERNAL REDIRECT]

[perdir C:/ TT/XAMPP/htdocs中/]穿過 C:/ TT/XAMPP/htdocs中/en/view.php

[perdir C:/ TT/XAMPP/htdocs中/]通過C:/ TT/XAMPP/htdocs中/ EN /約

任何幫助將不勝感激!

+0

哦,只是想 - 我知道我可以改變我的形象網址等絕對,但我真的不想(很多文件!) – jxmallett 2012-01-16 06:01:44

回答

0

以某種方式,你問的是錯誤的問題。你給予的規則,做你想做的事。你的問題是,劇本是爲你的CSS,圖像等發行相對地址,所以當客戶端瀏覽器請求example.com/en/about/topic包含相對鏈接href="base/code/view.css",該客戶將它轉換爲

example.com/en/about/base/code/view.css 

既然你不想改變你的腳本,因此你的挑戰是識別這種類型的模式,並去掉SEO編碼引入的無關目錄,所以如果這種情況是example.com/en/<don't care>/base/code/...那麼下列類型的規則將做什麼

RewriteRule en/.+?/base/code/(.*) en/base/code/$1 [L] 

用您需要的任何匹配模式替換/base/code

+1

輝煌!謝謝!這很有道理。我還沒有意識到客戶仍然將其請求輸入到輸入的地址,而不是修改後的地址。這也解釋了爲什麼所有的PHP仍然工作,因爲它是服務器端。 – jxmallett 2012-01-16 17:38:48