2010-04-28 66 views
0

背景:我有一個使用ASP.NET 2.0構建的網站,它在Windows主機上。我現在必須用PHP重寫我的站點,並將其轉移到Linux主機中。我有很多來自網絡的傳入鏈接,這些鏈接直接指向舊的.aspx頁面。該網站本身非常簡單,一個動態頁面和五個靜態頁面。Htaccess將重寫規則.aspx改爲.php

我將靜態.aspx頁面保存爲.php頁面,並在PHP中重寫了動態頁面。動態頁面被稱爲City.aspx,我用PHP編寫了它,現在叫做City.php。

在我的舊Windows主機上,我使用ASP.NET的URL映射來獲得友好的URL。例如,Laajakaista/Ypaja.aspx的傳入URL請求已映射到City.aspx?CityID = 981。

我的目標: 將所有尋求舊.aspx頁面的訪客和搜索引擎重定向到新的.php頁面。

我在想,將訪問者重定向到新頁面的最簡單方法是重定向,其中.aspx文件的所有請求都將被重定向到.php文件類型中。

所以,如果有人要求MYSITE/City.aspx?CityID = 5,他們會被帶入MYSITE/City.php?CityID = 5。

但是,我很難解決這個問題。

到目前爲止,這是我發現:

rewriterule ^([.]+)\.aspx$ http://www.example.com/$1.php [R=301,L] 

不過,我認爲這不能處理的文件類型後的參數,我也不太清楚要放什麼東西在前面。

爲了讓事情更復雜一點,在我以前的網站我使用友好的URL,這樣我和映射這樣一個巨大的映射文件:

<add url="~/Laajakaista/Ypaja.aspx" mappedUrl="~/City.aspx?CityID=981" /> 
    <add url="~/Laajakaista/Aetsa.aspx" mappedUrl="~/City.aspx?CityID=988" /> 
    <add url="~/Laajakaista/Ahtari.aspx" mappedUrl="~/City.aspx?CityID=989" /> 
    <add url="~/Laajakaista/Aanekoski.aspx" mappedUrl="~/City.aspx?CityID=992" /> 

我試圖做一個簡單的重定向這樣的:

Redirect 301 Laajakaista/Aanekoski.aspx City.php?CityID=992 

但是無法使其正常工作。我結束了一個內部服務器錯誤和一個50k .htaccess文件...

任何幫助,非常感謝。

回答

1

你真的想在htaccess文件中做cityname/ID翻譯嗎?

通常的方法是匹配Laajakaista/*.aspx並將地名作爲參數傳遞給PHP腳本(然後將其轉換爲ID)。這不是一個更好的主意嗎?

如果這是一種選擇,你會做這樣的事情:

rewriterule ^Laajakaista/([.]+)\.aspx$ city.php?cityname=$1 [QSA] 
rewriterule ^([.]+)\.aspx$ $1.php?%{QUERY_STRING} [R=301,QSA] 

你可以做,有或沒有301 - 301將改變URL在瀏覽器中可見。

+0

這將解決我的問題二。 但是,我仍然會收到很多不存在的.aspx頁面的請求,現在可以找到類似名爲.php的頁面。 關於第一個問題的任何想法? – 2010-04-28 14:53:28

+0

@Markus他們全都與城市名稱在同一個目錄中嗎? – 2010-04-28 14:54:55

+0

@Markus如果他們在同一個目錄中,你可以建立一個PHP前端控制器(例如index.php而不是city.php)並決定在index.php中做什麼:如果存在一個'cityname.php'文件,如果沒有,搜索一個名字的城市,如果失敗了,發送一個404.這不是太優雅,但如果你需要保留一段時間的搜索引擎優化原因的現有結構,我會說可以做。只要重寫應用程序只適用於aspx文件,而不適用於任何其他資源(如圖像),從性能角度來看也是可以的。 – 2010-04-28 14:56:32

1

嘗試將QSA添加到標誌,以使其成爲[R=301,L,QSA]。這代表「Query String Append」,並將舊URL中的所有查詢字符串附加到新URL。這應該解決你的文件名後面的參數問題。

RewriteRule ^(.*)\.aspx$ http://www.example.com/$1.php [R=301,L,QSA] 

至於其他映射,你可能想重新考慮你的方法。爲每個城市繪製一張圖似乎很麻煩。您應該將城市名稱作爲參數傳遞給city.php文件,並將其從名稱轉換爲ID。然後在.htaccess文件中只有一個RewriteRule條目,而不是每個城市的重定向。例如,

RewriteRule ^Laajakaista/(.*)\.aspx$ city.php?cityname=$1 [L] 
+0

我無法傳入.aspx文件,因爲我沒有ASP.NET來運行.aspx文件。我現在在一個Linux主機上,有很多通過.aspx結尾到我的域的傳入鏈接。對於我對這種情況的混亂解釋,我表示抱歉。 – 2010-04-28 15:14:44

+0

對不起,我的意思是PHP文件。 – 2010-04-28 15:22:11