我正在使用ASP .NET rewriteModule将http://example.com重写为http://www.example.com。
<section name="rewriteModule" type="RewriteModule.RewriteModuleSectionHandler, RewriteModule"/>
然后我在<system.webServer>
内有这个。
<rewrite>
<rules>
<rule name="Canonical" stopProcessing="true">
<match url=".*"/>
<conditions>
<add input="{HTTP_HOST}" pattern="^([a-z]+[.]com)$"/>
</conditions>
<action type="Redirect" url="http://www.{C:0}/{R:0}" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
现在我要删除页面末尾的所有.aspx。例如:
http://www.example.com/Register.aspx
将变成:
http://www.example.com/Register/
我该怎么做?
我正在使用IIS7在GoDaddy上进行共享虚拟主机托管。
答案 0 :(得分:22)
这是我开始每个项目的标准重写规则。我只为所有网页使用干净的网址(例如,第一条规则适用于www.example.com/about,第二条规则适用于www.example.com/product/123)
<rewrite>
<rules>
<rule name="Rewrite default to aspx" stopProcessing="true">
<match url="^$" ignoreCase="false" />
<action type="Rewrite" url="default.aspx" />
</rule>
<rule name="Rewrite page to aspx" stopProcessing="true">
<match url="^([a-z0-9/]+)$" ignoreCase="false" />
<action type="Rewrite" url="{R:1}.aspx" />
</rule>
</rules>
</rewrite>
我需要解析ID的页面(仅限此案例编号)并将其添加到查询字符串中我在前面添加了类似的规则:
<rule name="Rewrite Product ID" stopProcessing="true">
<match url="^product/([0-9]+)$" ignoreCase="false"/>
<action type="Rewrite" url="product.aspx?id={R:1}"/>
</rule>
如果要在URL中使用大写和小写字母,请设置ignoreCase =“true”
编辑以回答您的第二个问题加上奖金
此规则会将aspx页面重定向到干净的URL:
<rule name="Redirect to clean URL" stopProcessing="true">
<match url="^([a-z0-9/]+).aspx$" ignoreCase="true"/>
<action type="Redirect" url="{R:1}"/>
</rule>
将url =“{R:1}”替换为url =“{ToLower:{R:1}}”,将网址更改为小写。请参阅下文为什么要这样做。
同样最好更新“表单”操作,以便回发不会返回到丑陋的URL。使用IIS 7.5或更新版本应该可以:
if (!String.IsNullOrEmpty(Request.RawUrl))
form1.Action = Request.RawUrl;
或IIS 7:
if (!String.IsNullOrEmpty(Context.Request.ServerVariables["HTTP_X_ORIGINAL_URL"]))
form1.Action = Context.Request.ServerVariables["HTTP_X_ORIGINAL_URL"];
还要记住一件事......将所有网址保持在小写状态是个好主意。混合URL中的大写/小写字符会为SEO / Google创建重复的内容问题。例如,网站http://About和website.com/about将加载相同的页面,但Google会将它们编入两个单独的页面。
答案 1 :(得分:5)
首先,您需要删除.aspx( default.aspx )并重定向到默认以更改浏览器地址,然后使用IIS添加.aspx并重新连接到页面
<rewrite>
<rules>
<clear />
<rule name="Redirect to clean URL" enabled="true" stopProcessing="true">
<match url="^([a-z0-9/]+).aspx$" ignoreCase="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Redirect" url="{R:1}" />
</rule>
<rule name="RewriteASPX" enabled="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}.aspx" />
</rule>
</rules>
</rewrite>
答案 2 :(得分:3)
<rewrite>
<rules>
<remove name="RewriteUserFriendlyURL1" />
<remove name="RedirectUserFriendlyURL1" />
<rule name="RedirectUserFriendlyURL2" stopProcessing="true">
<match url="^www\.myserver\.com/(.*)\.aspx$" />
<conditions>
<add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
</conditions>
<action type="Redirect" url="www.myserver.com/{R:1}" appendQueryString="false" />
</rule>
<rule name="RewriteUserFriendlyURL2" stopProcessing="true">
<match url="^www\.myserver\.com/(.*)$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="www.myserver.com/{R:1}.aspx" />
</rule>
</rules>
<outboundRules>
<remove name="OutboundRewriteUserFriendlyURL1" />
<rule name="OutboundRewriteUserFriendlyURL2" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^(.*)www\.myserver\.com/(.*)\.aspx$" />
<action type="Rewrite" value="www.myserver.com/{R:1}" />
</rule>
</outboundRules>
</rewrite>
这样做 - 我已在本地计算机上生成此IIS - 将myserver.com更改为您自己的URL。你可以改变正则表达式来实际处理url的x.aspx部分然后它应该适用于所有页面