Я вижу на этом веб-сайте, что URL-адрес http://stackoverflow.com/questions/ask
. После этого расширение файла отсутствует, и если ask был папкой, а внутри нее, например, index.aspx, он выглядел бы как http://stackoverflow.com/questions/ask/
.
Как они это делают? Как они заставляют расширение исчезнуть? Спасибо, Фантом
Веб-страницы без расширения файла
Ответы (2)
Как они это делают? Как они заставляют расширение исчезнуть?
Расширение не исчезает, но расширения просто нет. В совсем недавнем (скажем, 15 лет) мире веб-программирования веб-приложение больше не представляет собой набор реальных каталогов с реальными файлами. Веб-приложения теперь имеют множество различных архитектур и применяют множество шаблонов. Веб-сервер также может предоставлять такую функцию с помощью расширения для перезаписи URL-адресов. Оба обычно также сочетаются.
Наиболее распространенный шаблон, реализующий это, — Front Controller. Идея в том, что ВСЕ запросы идут в единую точку входа. Затем эта точка входа может решить, какой код выполнить для генерирования выходных данных. В большинстве сред MVC URI после имени внешнего контроллера (обычно index.php) используется для определения того, какой класс контроллера и какой метод контроллера вызывать, хотя в наши дни они обычно настраиваются.
В примере http://stackoverflow.com/questions/ask
возможна следующая схема:
- Веб-сервер переписывает URL-адрес на
http://stackoverflow.com/index.php/questions/ask
- index.php в качестве внешнего контроллера, а затем проанализируйте сегменты URI после его имени, которое равно
/questions/ask
. - Затем он создает экземпляр класса
questions
и вызывает его методask
. - Метод генерирует выходные данные, которые затем отправляются обратно в качестве ответа на запрос.
Они используют так называемые правила перезаписи, возможно, в файле .htaccess в корневом каталоге сайта. Они добавили что-то подобное в свой файл .htaccess.
RewriteEngine On # Включить механизм перезаписи
RewriteRule ^ask/?$ questions.php?questionID={1} [NC,L]