2011-07-05 269 views
0

好吧,我的項目是將一箇舊的靜態網站變成一個動態的網站。舊網站中有大約40頁。htaccess重定向

現在,新格式將採用2種語言,未來可能會有更多。

有2套的URL實際上是:

  1. 的基本要點:/index.html,/about.html,/contact.html
  2. 休息:/folder1/page1.html,/文件夾1/page2.html,/folder3/page3.html等

客戶希望第二語言具有相同的模式作爲默認的一個:

  1. 日C基本的:/ 語言 /index.html,/ 語言 /about.html,/ 語言 /contact.html
  2. 休息:/language/folder1/page1.html,/語言/文件夾1/page2.html,/language/folder3/page3.html等

基本的網頁,我可以用htaccess的重寫:

# default language  
RewriteRule ^about.html$ about.php?language= [NC,L] 
#other language 
RewriteRule ^([^/]+)/about.html$ about.php?language=$1 [NC,L] 

至於我被困在頁面的其餘部分。

在我的數據庫中,我保存了現有的網址及其內容。

例如,對於基本的語言:

/folder1/page1.html將dynamicpage1.php語言= & URL = /文件夾1/page1.html

/文件夾2/2頁提供服務。 HTML將dynamicpage1.php?語言= &地址送達= /文件夾2/page2.html

/folder3/page3.html將dynamicpage2.php?語言服務= & URL =/folder3/page3.html

而對於其他語言:

/([^/]+)/folder1/page1.html將dynamicpage1.php送達語言= $ 1 & URL = /文件夾1/page1.html

/([^ /] +)/ folder2/page2.html將由dynamicpage1.php?語言= $ 1 & url =/folder2/page2.html

/([^ /] +)/ folder3/page3。 html將由dynamicpage2.php?語言= $ 1 & url =/folder3/page3.html

如何構建這些規則?

如果我嘗試:(。*)?重寫規則^([^ /] +)/ $ subservices.php語言1 & = $ URL = $ 2,它失敗

+0

1)你是什麼意思「失敗」? 2)'subservices.php'腳本是做什麼的? - 據我瞭解,它將決定運行哪個動態頁面,對嗎? – LazyOne

回答

1

你最好指定/列表中的網址可能的語言重寫規則 - 那會更準確。此規則正常工作:

RewriteRule ^((EN|FR)/)?(.*\.html)$ /subservices.php?language=$2&url=/$3 [NC,QSA,L] 

RewriteRule ^((english|french)/)?(.*\.html)$ /subservices.php?language=$2&url=/$3 [NC,QSA,L] 

更改EN|FR到你使用任何語言。

  • /index.html將被重寫到/subservices.php?language=&url=/index.html
  • /FR/index.html將被重寫到/subservices.php?language=FR&url=/index.html
  • /folder1/page1.html將被重寫到/subservices.php?language=&url=/folder1/page1.html
  • /FR/folder1/page1.html將被重寫到/subservices.php?language=FR&url=/folder1/page1.html
  • /ZZ/folder1/page1.html將被重寫到/subservices.php?language=&url=/ZZ/folder1/page1.html(ZZ不被認爲是可接受的語言)。
+0

我試過你的代碼,而不是EN | FR我用英語|法語,我得到了inernal服務器錯誤500.這隻適用於EN我承擔? – andrew

+0

我犯了一個小錯誤(我用過無用的'[]') - 再次檢查規則 - 在我的電腦上測試過並且工作正常 – LazyOne

+0

ok我有50% RewriteRule ^((english | french)/ )?(。* \。html)$ /subservices.php?language=$2&url=/$3 [NC,QSA,L] 這適用於/法國/目錄 但英文我得到500內部服務器錯誤 我想其他一些規則與這個衝突..將嘗試調試,看看我會發現什麼 – andrew