Я пытаюсь реализовать переписывание 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
Руководство для начинающих по 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). Это, по сути, позволяет вам рассматривать ваш сайт как группу функций:
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 режима:
Это бесплатно, поэтому вы можете просто загрузить и просмотреть код.
В качестве примечания, перенаправление 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, но имеет несколько преимуществ:
Вы можете удалить index.php из URL с помощью mod_rewrite, см. Здесь: http://www.wil-linssen.com/expressionengine-removing-indexphp/