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

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

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

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

Если вы ссылаетесь на URL-адреса /posts/edit/522452 в отличие от URL-адресов /posts.asp?action=edit&postid=522452 (или что бы это ни переводилось на конец), это обычно делается с помощью 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'] , точно так же, как если бы браузер попросил переписанную форму.

Чтобы использовать такие 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']);
     $ segment = explode ('/', trim ($ _ SERVER ['REQUEST_URI_PATH'], '/'));
     var_dump ($ сегментов);
    

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

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

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

Существует несколько причин, но в основном:

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

  • 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

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

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

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