Удалить .aspx со страниц, используя rewriteModule? - PullRequest
17 голосов
/ 23 мая 2011

Я использую 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.

Ответы [ 3 ]

22 голосов
/ 16 июня 2011

Это стандартные правила перезаписи, с которых я начинаю каждый проект. Я использую только чистые 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 проиндексирует их как две отдельные страницы.

5 голосов
/ 06 марта 2013

Сначала вам нужно удалить .aspx ( default.aspx ) и перенаправить на default , чтобы изменить адрес браузера, затем добавить .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 голосов
/ 23 мая 2011
<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, тогда оно должно работать на всех страницах

...