2013-06-16 3 views
0

Это название не очень описательное, но я не мог понять, как правильно рассказать о моем вопросе. То, что я пытаюсь сделать, это использовать одну страницу для интерпретации нескольких URL-адресов. Вот пример: [domain]/name-of-question.aspx явно не является файлом на сервере сайта, и все же сервер работает так, как есть. Такое поведение делает страницы более читабельными и более удобными для закладок. Мое видение решения заключается в том, чтобы иметь возможность перенаправлять сервер на определенный каталог на определенную страницу, добавляя имя страницы, запрошенной на страницу, в качестве параметра URL. Вот что я имею в виду: [domain]/questions/name-of-question перенаправляет на [domain]/question.aspx?page=name-of-question. Вот как, по-моему, reddit делает свои собственные сообщения, но они не используют ASP.Net или IIS.Перенаправить произвольный запрос в каталог на определенную страницу в ASP.Net

Возможно ли это, и если да, то как реализовать это поведение? Если есть какой-либо код, который вы пишете, напишите его на C#, потому что я не очень хорошо знаю VB.Net. Благодаря!

ответ

3

Чтобы выполнить это, вам необходимо использовать переписывание URL.

Вы должны создать правило, переопределяющей любые запросы [домен]/вопросы/{1} в [домен] /question.aspx? {1}

В ASP.NET у вас есть URL модуль Rewriter: http://www.iis.net/downloads/microsoft/url-rewrite

правило может выглядеть примерно так и применяется в файле web.config:

 <rewrite> 
     <rules> 
      <rule name="RewriteUserFriendlyURL1" stopProcessing="true"> 
       <match url="questions/(.*)" /> 
       <conditions> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="question.aspx?{R:1}" /> 
       <serverVariables> 
        <set name="{RESPONSE_CONTENT_TYPE}" value="image/png" /> 
       </serverVariables> 
      </rule> 
     </rules> 
    </rewrite> 

EDIT: для того, чтобы изменить тип содержимого, добавьте в раздел ServerVariables в правила перезаписи и авторизации эта переменная, которая должна быть установлена ​​i н менеджер IIS:

server variables allow server variable

+0

Спасибо! Я понимаю все, кроме тегов 'conditions'. Не могли бы вы объяснить это? Для меня эти теги кажутся противоречивыми, но я их не понимаю, поэтому я могу быть в стороне. – Jack

+1

Это для случая кромки, если входящий запрос соответствует существующей странице в папке на диске, запрос не будет перезаписан и вместо этого будет использоваться существующая страница. Из вашего описания они совершенно безопасны для удаления. – nimeshjm

+0

У меня есть еще один вопрос: Как я могу указать тип документа как изображение? Я использую это для обработки изображений, поэтому я не могу иметь тип 'text/html'. Еще раз спасибо! – Jack

0

Если вы используете ASP.NET 4.0+, то это может быть стоит прочитать, так как ASP.NET маршрутизации и URL переписывания не обязательно конкурирующих технологий, но потенциально дополняют друг друга функции.

URL Rewriting vs. ASP.NET Routing

Смежные вопросы