Как URL, похожий на http://stackoverflow.com/posts/1807421/edit, был создан в PHP? - PullRequest
2 голосов
/ 27 ноября 2009

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

Ответы [ 8 ]

7 голосов
/ 27 ноября 2009

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

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

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

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

2 голосов
/ 27 ноября 2009

Вы используете Apache .htaccess / mod_rewrite и, опционально, PHP-файл, который мне нравится использовать сам.

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

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

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

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

$url = $_SERVER['REQUEST_URI'];

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

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

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

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

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

2 голосов
/ 27 ноября 2009

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

2 голосов
/ 27 ноября 2009

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

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

1 голос
/ 27 ноября 2009

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

Сначала: вы создаете .htaccessfile со следующим содержимым:

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

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

0 голосов
/ 27 ноября 2009

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

0 голосов
/ 27 ноября 2009

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

0 голосов
/ 27 ноября 2009

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

...