Семантические ссылки с точками в .net - PullRequest
25 голосов
/ 17 ноября 2008

Я пытаюсь создать семантические URL для страниц поиска, но если кто-то использует поиск, завершенный точкой, механизм .net возвращает 404.

Запрос даже не попадает в механизм маршрутизации, поэтому я думаю, что это связано с безопасностью или чем-то в этом роде.

Например, маршруты stackoverflow также не работают в следующих случаях: https://stackoverflow.com/questions/tagged/etc.

Ответы [ 6 ]

24 голосов
/ 22 августа 2010

Если вы используете .NET 4.0 и IIS 7+, вы можете установить этот флаг в разделе system.web вашего web.config, и это будет разрешено:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

Я проверил это, и оно работает. Хаак имеет объяснение этого.

8 голосов
/ 30 ноября 2008

Все после '.' это расширение файла. Если это расширение не сопоставлено с ASP.NET, оно не будет передано обработчику ASP.NET. IIS вместо этого ищет статический файл. Отсюда 404. Если он ничего не добавляет (и трудно понять, как это будет), я предлагаю удалить его.

1 голос
/ 30 марта 2010

Когда завершающий период не является значительным (как это имеет место в случае https://stackoverflow.com/questions/tagged/etc.), вы можете использовать модуль перезаписи URL IIS, чтобы вырезать завершающие периоды.

Шаблон : ^(.*[^.])(\.+)$
Переписать URL: {R:1}

Это не поможет, если выбрасывать период нельзя, или есть периоды в конце промежуточных сегментов пути, но для очень реального случая использования периодов, привязываемых к URL-адресам автоматически Алгоритмы связи это может помочь.

0 голосов
/ 30 ноября 2008

Вы не должны помещать точные пользовательские запросы в строку запроса, как это ... вы должны UrlEncode их. Это решит проблему.

0 голосов
/ 30 ноября 2008

В окнах имена файлов не могут заканчиваться на «.» Я думаю, что все проблемы проистекают из этого, то есть IIS не знает, что с ним делать, поэтому он никогда не заходит так далеко, как обработчик ошибок ASP.NET и получает дескрипторы по умолчанию на странице IIS 404.

Большинство поисковых систем (в любом случае, Google в любом случае ) исключают знаки препинания из запросов, и я думаю, что ваши тоже должны.

EDIT: Он падает, потому что у него нет типа файла, даже сайт Microsoft не выглядит http://www.microsoft.com/en/us/fallover., но вы можете изменить файлы ошибок по умолчанию (жить где-то вроде C: \ WINDOWS \ help \ iisHelp \ common) или измените его полностью.

Проверьте это: Настройка пользовательских сообщений об ошибках (IIS 6.0)

0 голосов
/ 17 ноября 2008

Похоже, что IIS может не знать, как обрабатывать запрос с пустым расширением.

Щелкните правой кнопкой мыши на сайте и выберите «Свойства». Нажмите «Конфигурация ...» на вкладке «Домашний каталог». Посмотрите на «Расширения приложений» и попробуйте добавить пустое или подстановочное расширение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...