Как StackOverflow избегает расширений файлов и параметров GET в своих URL? - PullRequest
2 голосов
/ 11 января 2012

Это всегда поражало меня. Когда вы задаете вопрос о стеке над потоком, в URL-адресе нет выражения get. У этого также нет никакого расширения как .cgi или .php.

Однако это не статическая html-страница, она управляется базой данных, так как она изменяется, когда вы публикуете ответы или вопросы.

Это как-то связано с их конфигурацией .htaccess. Как можно достичь подобного эффекта.

Используя php или другой язык, как кто-то может создать динамически редактируемый php, не делая этого вручную, например, через форму, подобную той, как я отправил этот вопрос.

Ответы [ 6 ]

7 голосов
/ 11 января 2012

Красивые / Чистые / Необычные URL-адреса

По сути, веб-сервер знает, что сегменты URL-адреса на самом деле являются параметрами GET, и он "перезаписывает"URL перед передачей в PHP / Ruby / .NET / и т. Д.

Например, Apache использует модуль mod_rewrite для выполнения этого поведения.

3 голосов
/ 11 января 2012

Хотя I не может говорить за Stackoverflow, я знаю, что одним из распространенных способов является использование mod_rewrite для преобразования симпатичного URL в один с параметрами "GET". Многие решения обертывают mod_rewrite, другие способы включают [не-Apache] веб-серверы.

Этот лист также очень полезен.

2 голосов
/ 11 января 2012

Они называются Чистые URL , иначе называемые симпатичными или дружественными URL:

Чистые URL, RESTful или удобные URL являются чисто структурными URL-адреса, которые не содержат строку запроса и содержат только путь к ресурсу (после схемы [например, http] и полномочия [например. example.org]). Это часто делается для эстетики, удобства использования или цели поисковой оптимизации (SEO). Другие причины для проектирования Чистая структура URL для веб-сайта или веб-службы включает в себя обеспечение что отдельные ресурсы остаются под одним и тем же URL в течение многих лет, что делает Всемирную паутину более стабильной и полезной системой, а также они запоминаются, логичны, просты в вводе, ориентированы на человека и долговечны.

Каждый веб-сервер имеет свой собственный метод управления чистыми URL-адресами. Apache использует правила чтения mod_rewrite из файла .htaccess. Существует множество примеров переполнения стека о том, как люди используют это:

https://stackoverflow.com/search?q=htaccess+rewrite

В большинстве веб-серверов вы управляете набором правил перезаписи URL-адресов для получения запросов, запускающих именованные сценарии. Например, вы можете запросить /questions/8811192/question-title, но сервер переписывает это на /mywebsite.php?id=8811192&convention=questions, тогда ваш скрипт mywebsite.php запускается с параметрами id и установленным соглашением, чтобы ваш скрипт знал, что пользователь первоначально запрашивал. Затем он обращается к базе данных и динамически создает страницу.

Обратитесь к документации вашего веб-сервера за дополнительной информацией о чистых URL.

1 голос
/ 11 января 2012

Mod_rewrite является одним из примеров.Это можно использовать, я скрываю расширения .php в вашем приложении.

Или если вы используете прикладную платформу, такую ​​как java, django или фляга для python или ruby ​​на рельсах, или rake для ruby, и т. Д.веб-сервер обрабатывает запрос на уровне приложения, который вы используете для интерактивности.От плагина mod_php до fast_cgi к wsgi и т. Д.

0 голосов
/ 11 января 2012

URL-путь не должен быть привязан к какому-либо физическому местоположению в файловой системе.

Вы можете проанализировать URL-адрес в своем веб-приложении и выполнить код, сопоставленный с конкретным шаблоном URL-адреса. Думайте об этом как о внутреннем mod_rewrite внутри приложения. Большинство современных веб-фреймворков имеют своего рода диспетчер на основе URL.

Однако, если вы используете сценарии cgi или cgi-подобное выполнение приложения (например, php-cgi, который на самом деле является сервером протокола fast-cgi), вам придется использовать упомянутый mod_rewrite или какое-то подобное решение в зависимости от на веб-сервере, который вы используете.

0 голосов
/ 11 января 2012

Некоторые фреймворки просто делают это по умолчанию.

Посмотрите, например, на Yii или Zend Framework, они позволят вам достичь этого эффекта.

Обычно они привлекают веб-сервер, чтобы помочь ему в этом.

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