Как мне переписать URL в php? - PullRequest
       32

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

1 голос
/ 07 февраля 2009

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

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

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

Ответы [ 5 ]

6 голосов
/ 07 февраля 2009

Если вы ссылаетесь на URL-адреса в стиле /posts/edit/522452, а не на URL-адреса стиля * 1002 (или на то, что он переводит на внутренний интерфейс), это обычно делается с помощью программы переписывания URL, например mod_rewrite. Правило для этого URL может выглядеть так:

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

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

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

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

2 голосов
/ 07 февраля 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 в ваших выходных. (Тривиальное)

1 голос
/ 07 февраля 2009

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

0 голосов
/ 07 февраля 2009

Есть несколько причин, но принципиально:

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

  • Readibility:

    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

0 голосов
/ 07 февраля 2009

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

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

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

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