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