背景:我有一个网站,它是用Windows2.0建立的,并且是在ASP.NET主机上。我现在必须用PHP重写我的网站,并把它移到Linux主机上。我有很多网站的传入链接,这些链接直接指向旧的.aspx页面。该网站本身非常简单,一个动态页面和五个静态页面。
我将静态.aspx页面另存为.php-pages并用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] 但是,我认为这不能处理filetype之后的参数,我也不太确定要放在前面的是什么。
让事情变得更复杂的是,在我之前的网站上,我使用了友好的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-file...
任何帮助都是非常感谢的。
发布于 2010-04-28 22:48:18
您真的想在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。
发布于 2010-04-28 22:49:10
尝试将QSA添加到标志中,这样它就是[R=301,L,QSA]。这代表“查询字符串追加”,并将所有查询字符串从旧的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]https://stackoverflow.com/questions/2730476
复制相似问题