繁体   English   中英

htaccess将规则.aspx重写为.php

[英]Htaccess rewrite rule .aspx to .php

背景:我有一个使用ASP.NET 2.0构建的网站,并且该网站位于Windows托管上。 现在,我必须用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] 

但是,我认为这不能处理文件类型之后的参数,我也不太确定该放在前面。

为了使事情变得更加复杂,在我以前的站点中,我使用了友好的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文件...

任何帮助是极大的赞赏。

您是否真的要在htaccess文件中进行城市名称/ 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。

尝试将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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM