Удаление .aspx со страниц с использованием rewriteModule?
Я использую 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/
Как я могу это сделать?
Я участвую в общем веб-хостинге на GoDaddy, используя IIS7.
Ответы
Ответ 1
Это стандартные правила перезаписи, с которых я начинаю каждый проект. Я использую только чистые URL-адреса для всех страниц (пример первого правила работает для 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>
Страницы, где мне нужно проанализировать идентификатор (только этот номер случая) и добавить его в строку запроса. Я добавляю аналогичное правило в начало:
<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 на нижний регистр. Ниже показано, почему вы хотели бы это сделать.
Также хорошая идея обновить действие формы, чтобы сообщения обратно не возвращались обратно к уродливому 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-адреса в нижнем регистре. Смешивание символов нижнего/верхнего регистра в URL-адресе создает повторяющиеся проблемы с содержимым для SEO/Google. Например, website.com/About и website.com/about загружают одну и ту же страницу, но Google будет индексировать их как две отдельные страницы.
Ответ 2
Сначала вам нужно удалить .aspx(default.aspx) и перенаправить на по умолчанию, чтобы изменить адрес браузера, затем добавьте .aspx и перейдите на страницу с помощью IIS
<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>
Ответ 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. вы можете изменить регулярное выражение, чтобы фактически позаботиться о части x.aspx URL-адреса, тогда он должен работать на всех страницах