Семантические URL-адреса с точками в .net
Я пытаюсь сделать семантические URL-адреса для поисковых страниц, но если кто-то использует поиск, завершенный в точке, двигатель .net возвращает 404.
Запрос даже не попадает в механизм маршрутизации, поэтому я думаю, что его что-то связано с безопасностью или что-то в этом роде.
Например, маршруты stackoverflow также не работают в этом случае:
https://stackoverflow.com/info/tagged/etc.
Ответы
Ответ 1
Если вы используете .NET 4.0 и IIS 7+, вы можете установить этот флаг в разделе system.web вашего web.config, и это будет разрешено:
<httpRuntime relaxedUrlToFileSystemMapping="true" />
Я тестировал его, и он работает. Haack имеет объяснение.
Ответ 2
Все после "." это расширение файла. Если это расширение не сопоставляется с ASP.NET, оно не будет передано обработчику ASP.NET. Вместо этого IIS ищет статический файл. Следовательно, 404. Если он ничего не добавляет (и трудно понять, как это будет), я предлагаю отказаться от него.
Ответ 3
Когда конечный период не является значимым (как в случае https://stackoverflow.com/questions/tagged/etc.), вы можете использовать модуль URL-адреса URL-адреса IIS для разделения периодов ожидания.
Шаблон: ^(.*[^.])(\.+)$
Перепишите URL-адрес: {R:1}
Это не поможет, когда отбрасывание периода не является вариантом, или есть периоды в конце сегментов промежуточного пути, но для реального варианта использования дел с привязкой периодов к URL-адресам автоматически которые могут помочь.
Ответ 4
Похоже, что IIS может не знать, как обрабатывать запрос с пустым расширением.
Щелкните правой кнопкой мыши на веб-сайте и выберите "Свойства".
Нажмите "Конфигурация..." на вкладке "Домашний каталог".
Посмотрите на "Расширения приложений" и попробуйте добавить пустые расширения или подстановочные знаки.
Ответ 5
В окнах имена файлов не могут заканчиваться символом '.'
Я думаю, что все проблемы возникают из-за этого, то есть IIS не знает, что с ним делать, поэтому он никогда не доходит до обработчика ошибок ASP.NET и не обрабатывает страницу по умолчанию IIS 404.
Большинство поисковых систем (хорошо Google в любом случае) исключают пунктуацию из запросов, и я думаю, что ваш тоже должен.
EDIT:
Он падает, потому что у него нет типа файла, даже сайт Microsoft падает на вид http://www.microsoft.com/en/us/fallover., но вы можете изменить файлы ошибок по умолчанию (жить где-то вроде C:\WINDOWS\help\iisHelp\common) или полностью изменить его.
Отметьте это: Настройка пользовательских сообщений об ошибках (IIS 6.0)
Ответ 6
Вы не должны помещать точные поисковые запросы пользователя в строку запроса, как это... вы должны UrlEncode их. Это решит проблему.