Как переписывать 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

Ответ 1

Руководство для начинающих по 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. Поэтому, если вы посетили сайт www.examplesite.com/subjects/php, вы действительно можете посетить www.examplesite.com/index.php?a=subjects&b=php.

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

www.mysite.com/jokes

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

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

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

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

Ответ 2

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

Ответ 3

Использование 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

Ответ 4

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

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

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

Ответ 5

Если ваш сервер поддерживает его (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]

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

Ответ 6

После того, как я снова прочитал комментарии и вопрос, я понял, что мой предыдущий ответ - это не совсем то, что вы ищете. Итак, здесь некоторые дополнения, если вы хотите переписать/перенаправить/прокси URL-адреса, например, например, пользовательские типы www.f1.com, он действительно увидит 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. Здесь больше примеров.

Ответ 7

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

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

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

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

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

Ответ 8

К сожалению, это действительно зависит от веб-сервера, а не от PHP. В зависимости от того, используете ли вы Apache или что-то еще, он должен сделать это, прежде чем ваш script будет выполнен. Я использую 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.

Ответ 9

Вы можете приблизиться к этому немного иначе, чем предлагаемые выше предложения, используя 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- Ио.

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

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

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