Когда вы редактируете вопрос на 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?
С помощью 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.