Как переписывать URL в PHP?

Я пытаюсь реализовать переписывание URL в моем приложении PHP. Может ли кто-то поэтапная процедура внедрения переписывания URL-адресов в PHP и MySQL?

В моем приложении я хочу реализовать следующую переписывание URL-адресов, я хочу перенаправить

1. http://example.com/videos/play/google-io-2009-wave-intro 2. http://example.com/videos/play/203/google-io-2009-wave-intro 

в

 1. http://example.com/videos/play.php?title=google-io-2009-wave-intro 2. http://example.com/videos/play.php?id=203 

Скажите, пожалуйста, как реализовать оба переписывания URL в любом из вышеперечисленных способов.

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

 1. http://example.com/videos/play/google-io-2009-wave-intro 2. http://example.com/videos/play/203/google-io-2009-wave-intro 

Solutions Collecting From Web of "Как переписывать URL в PHP?"

Руководство для начинающих по mod_rewrite .

Обычно это будет не что иное, как включение модуля mod_rewrite (скорее всего, он уже включен с вашим хостом), а затем добавление файла .htaccess в ваш веб-каталог. Как только вы это сделаете, вы всего лишь в нескольких строках от дела. Упомянутый выше урок позаботится о вас.

Просто для удовольствия, вот файл Kohana .htaccess для перезаписи:

 # Turn on URL rewriting RewriteEngine On # Installation directory RewriteBase /rootDir/ # Protect application and system files from being viewed RewriteRule ^(application|modules|system) - [F,L] # Allow any files or directories that exist to be displayed directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Rewrite all other URLs to index.php/ RewriteRule .* index.php/$0 [PT,L] 

Это будет делать все запросы и направлять их через файл index.php. Поэтому, если вы посетили сайт http://www.examplesite.com/subjects/php, вы действительно можете посетить http://www.examplesite.com/index.php?a=subjects&b=php.

Если вы найдете эти URL привлекательными, я бы посоветовал вам сделать еще один шаг и проверить MVC Framework (Model, View, Controller). Это, по сути, позволяет вам рассматривать ваш сайт как группу функций:

http://www.mysite.com/jokes

 public function jokes ($page = 1) { # Show Joke Page (Defaults to page 1) } 

Или, http://www.mysite.com/jokes/2

 public function jokes ($page = 1) { # Show Page 2 of Jokes (Page 2 because of our different URL) } 

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

Вы не можете сделать это только с помощью PHP. Вам нужно будет изучить mod_rewrite (при условии, что вы используете apache).

Использование mod rewrite:

 RewriteRule ^videos/play/([0-9]+)/([^.]+)$ play.php?id=$1&name=$2 

example.com/play.php?id=203&name=google-io-2009-wave-intro

будет работать как

example.com/videos/play/203/google-io-2009-wave-intro

Имейте в виду, что перенаправление – это не то же самое, что переписывать.

Переадресация – это когда сервер получает запрос и ответ отправляется как перенаправление. Например, вы запрашиваете страницу http://www.example.com/page. Когда сервер получает это, либо страница, либо сам сервер выдает команду переадресации браузеру. Команда перенаправления в основном говорит: «Иди сюда: новая страница». В PHP это в виде заголовка ('Location: newpage.html');

Переписывание происходит, когда сервер получает запрос от браузера, затем просматривает список соответствующих регулярных выражений для этого сайта. Если совпадение найдено, URL-адрес переписывается в эту форму и на него отвечает соответственно. Например, запрошенный URL-адрес http://www.example.com/specificpage можно переписать (на сервере) как http://www.example.com/?loadpage=specificpage. Браузер никогда не получает информацию заголовка о том, что он должен идти куда-то еще.

Если ваш сервер поддерживает его (apache / mod_rewrite), вы можете использовать файл .htaccess, чтобы перенаправить посетителя.

Что-то вроде (просто черновик, приспосабливайтесь к вашим собственным потребностям …):

 RewriteEngine On RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L] 

для второго примера.

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

В своей настройке он принимает 3 режима:

  1. Регулярные URL:? Id = zzz
  2. .htaccess rewrite: использует apache для перезаписи
  3. внутренняя (php) переписывать: URL-адреса выглядят так, как http://www.example.com/kb/doku.php/start

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

В качестве примечания, перенаправление apache, скорее всего, лучшее решение, но чистая php-версия также интересна в случае, если ваш код будет запущен на серверах IIS6, где переписывание не так просто, как в apache.

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

 <Directory "/home/www/html"> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php/%{REQUEST_URI} [PT,L] </Directory> 

Вышеупомянутое правило в основном говорит, что URL-адрес является допустимым путем к реальному файлу или каталогу, загрузите его. В противном случае запустите его через index.php.

Еще раз прочитав комментарии и вопрос, я понял, что мой предыдущий ответ – это не совсем то, что вы ищете. Итак, здесь некоторые дополнения, если вы хотите переписать / перенаправить / прокси URL-адреса, например, например, пользовательские типы http://www.f1.com, он действительно увидит http://www.f2.com, но домен останется прежним, вам, вероятно, потребуется настроить обратный прокси-сервер, использующий Apache для этого. Это похоже на mod_rewrite.

Что касается второй части, так как современный гусеничный манипулятор также выполняет анализ URL-ссылок, я думаю, что ваш первый вариант – лучшая производительность.

Предыдущий ответ:
И используя PHP, вы можете добиться перенаправления:

 <?php // Here you can parse the current location // and decide whenever you want to go // if $_SERVER[ 'PHP_SELF'] some conditions then.... header('Location: http://www.example.com/'); ?> 

От php.net . Вот еще примеры.

Вы можете приблизиться к этому немного иначе, чем к приведенным выше предложениям, используя Front Controller, это общее решение для создания пользовательских URL-адресов и используется на всех языках, а не только на PHP. Вот руководство: http://www.oreillynet.com/pub/a/php/2004/07/08/front_controller.html

По существу, вы должны создать файл index.php, который вызывается для каждого URL-адреса, его задача заключается в анализе URL-адреса и определении того, какой код будет выполняться на основе содержимого URL-адреса. Так, например, пользователь будет использовать URL-адрес, например http://example.com/index.php/videos/play/203/google-io-2009-wave-intro, а index.php будет извлекать оставшиеся элементы из URL (/ videos / play / 203 / google-io-2009-wave-intro) возьмите первую часть, загрузите файл php с этим именем (video.php или вы можете использовать его play.php) и пройдите через параметры 203 и google-io.

Это эффективно делает то же самое, что и переписывание кода в mod_rewrite, но имеет несколько преимуществ:

  1. Не требуется слишком много кода mod_rewrite, если вы новичок в этом.
  2. Позволяет поместить весь код безопасности в одном месте – в index.php
  3. Легко менять URL-адреса и обрабатывать 404 и т. Д.

Вы можете удалить index.php из URL с помощью mod_rewrite, см. Здесь: http://www.wil-linssen.com/expressionengine-removing-indexphp/