Как был создан URL-адрес http://stackoverflow.com/posts/1807421/edit, созданный на PHP?

Когда вы редактируете вопрос на stackoverflow.com, вы будете перенаправлены на такой URL:

https://stackoverflow.com/posts/1807421/edit

Но обычно это должно быть

https://stackoverflow.com/posts/1807491/edit.php

или

https://stackoverflow.com/posts/edit.php?id=1807491

Как был

https://stackoverflow.com/posts/1807421/edit создан?

Я знаю, что Stackoverflow.com не был создан с использованием PHP, но мне интересно, как это сделать в PHP?

Related of "Как был создан URL-адрес http://stackoverflow.com/posts/1807421/edit, созданный на PHP?"

С помощью apache и PHP вы можете выполнить один из ваших примеров, используя правило mod_rewrite в конфигурации apache следующим образом:

RewriteEngine On RewriteRule ^/posts/(\d+)/edit /posts/edit.php?id=$1 

Это ищет URL-адреса «чистой» формы, а затем переписывает их, чтобы они были внутренне перенаправлены на определенный PHP-скрипт.

Довольно часто такие правила используются для маршрутизации всех запросов в общий скрипт контроллера, который может сделать что-то вроде создания экземпляра класса PostsController и попросить обработать запрос на редактирование. Это общая особенность большинства фреймворков PHP.

Это называется маршрутизация. Взгляните на учебные пособия по этому вопросу.

Если вы используете фреймворк, такой как cake php, он должен быть встроен.

Как заявил @ mr-euro, вы можете использовать mod_rewrite, но передний контроллер – намного лучшее решение. Вы заставляете каждый запрос индексировать index.php и записываете свое приложение в index.php.

Вы используете Apache's .htaccess / mod_rewrite и, возможно, файл PHP, который является подходом, который мне нравится брать.

Для .htaccess, что-то вроде этого:

 RewriteEngine On RewriteRule ^(.*)$ index.php 

Затем в вашем файле PHP вы можете сделать что-то вроде этого:

Следующее должно получить все после первой косой черты.

 $url = $_SERVER['REQUEST_URI']; 

Затем вы можете использовать взрыв, чтобы превратить его в массив.

 $split = explode('/', $url); 

Теперь вы можете использовать массив, чтобы определить, что загрузить:

 if ($split[1] == 'home') { // display homepage } 

Массив начинается с 1, так как 0 обычно будет пустым.

Это действительно сделано mod_rewrite или с несколькими видами. Но я предпочитаю mod_rewrite.

Во-первых: вы создаете файл .htaccess с этим содержимым:

 RewriteEngine On RewriteRule ^posts/([0-9])/(edit|delete)$ /index.php?page=posts&postId=$1&action=$2 

Очевидно, mod_rewrite должен быть включен вашим хостинг-провайдером;)

Использование mod_rewrite может быть достигнуто очень легко.

Я плохо разбираюсь в этом, но я знаю, что вы можете перенаправить URL-адреса с помощью apache mod_rewrite и прикоснуться к файлам конфигурации. Из того, что я помню, htaccess можно использовать для перенаправления . Затем, когда пользователь нажимает http://stackoverflow.com/posts/1807421/edit он может использовать вашу страницу http://stackoverflow.com/edit.php?p=1807421 вместо того, что вам нужно.

Вы можете использовать htaccess + написать класс парсеров URI.