Как мне перезаписать URL на php?

Это двойной вопрос: правильный ответ будет на «Как вы это делаете в PHP», объясняя, есть ли какие-либо преимущества, если это возможно.

Мне просто любопытно, потому что я действительно не знаю, и я часто вижу это на веб-страницах.

Изменить: я не знаю технического имени, но, например, здесь, в Stackoverflow: «http://stackoverflow.com/posts/edit/522452» - это то, что я имею в виду как «папки» (термин, ранее использовавшийся в заголовке вопроса).


person fmsf    schedule 06.02.2009    source источник
comment
Хм? Что вы имеете в виду, передавая аргументы как «папки»?   -  person Randolpho    schedule 07.02.2009
comment
да, как здесь, в stackoverflow: p, я не знаю технического имени   -  person fmsf    schedule 07.02.2009
comment
Я думаю, он имеет в виду маршрутизацию, как в MVC.   -  person George Stocker    schedule 07.02.2009
comment
Stack Overflow использует ASP.NET MVC. Вы имеете в виду использование традиционного запроса GET. MVC обрабатывает это по-другому (я намеренно чрезмерно упрощаю).   -  person George Stocker    schedule 07.02.2009
comment
хорошо, так что эта структура возможна только в mvc? еще есть ли преимущества?   -  person fmsf    schedule 07.02.2009


Ответы (5)


Если вы имеете в виду URL-адреса в стиле /posts/edit/522452, а не URL-адреса в стиле /posts.asp?action=edit&postid=522452 (или что-то еще, на что он переводится в серверной части), это обычно делается с помощью средства перезаписи URL, например _ 3_. Правило для этого URL-адреса может выглядеть так:

RewriteRule ^/posts/(\w+)/(\d+) /posts.asp?action=\1&postid=\2

Два основных преимущества этого типа URL:

  1. URL-адреса типа «папка» легче вводить и запоминать.
  2. Страница "выглядит" как страница для HTTP-прокси. Традиционно прокси-серверы не кэшируют страницы с параметрами, поскольку они не представляют отдельный контент и меняются слишком часто (подумайте о результатах поиска). Использование URL-адресов в стиле папки позволяет кэшировать их в обычном режиме.

В PHP вы можете получить доступ к этим параметрам через $_GET['action'] и $_GET['postid'], точно так же, как если бы браузер запросил переписанную форму.

person Ben Blank    schedule 06.02.2009

Чтобы использовать такие URL-адреса, вам необходимо выполнить три шага:

  1. Сообщите веб-серверу, что эти запросы должны перенаправляться на ваш PHP-скрипт. В Apache для этого вы можете использовать модуль mod_rewrite:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule !^index\.php$ index.php [L]
    

    Эти директивы перенаправляют каждый запрос, который не соответствует файлу в файловой системе, на index.php.

  2. Получите ваш скрипт для анализа этих URL:

    $_SERVER['REQUEST_URI_PATH'] = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']);
    $segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/'));
    var_dump($segments);
    

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

  3. Используйте эти URL-адреса в своем выводе. (тривиально)

person Gumbo    schedule 06.02.2009

Часть для целей SEO, кеширования и удобочитаемости, как указывали другие, я хотел бы добавить, что параметры стиля папки также являются стимулом для пользователей "поиграть" с параметрами. Например, здесь, в Stackoverflow, часто возникает соблазн отредактировать URL-адрес вручную при фильтрации по тегам, вместо того, чтобы искать соответствующую кнопку и нажимать на нее.

person UncleZeiv    schedule 06.02.2009

Причин несколько, но основные:

  • SEO-цели. Поисковые системы обычно игнорируют все, что находится после символа "?" знак вопроса, в результате чего страницы остаются неиндексированными или, что еще хуже, вообще не индексируются.

  • Читаемость:

    www.somesite.com/products/devices/keyboards/20,asc
    www.somesite.com/products/devices/keyboards/20,asc.html
    

    выглядит лучше, чем:

    www.somesite.com?show=products&cat=devices&sub_cat=keyboards&sort=asc&items=20
    
  • Кеширование.

Для получения информации о том, как это сделать в Apache: http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

person adamJLev    schedule 06.02.2009

Преимущество - удобочитаемость и, возможно, лучшее размещение в поисковых системах.

Вы можете добиться этого с помощью mod_rewrite, если используете Apache. В PHP вы также можете посмотреть на предопределенные глобальные переменные - я думаю, $_SERVER['REQUEST_URI'] работает, но может быть и получше.

При использовании простого PHP без перезаписи вы также можете удалить .php из имени файла сценария, если вы правильно настроили свой сервер и, таким образом, по-прежнему получаете «хорошие» URL-адреса.

person Christoph    schedule 06.02.2009