Как сделать перезапись URL в PHP?

mkdir c:\JDK
cd c:\JDK
git clone https://bitbucket.org/ramazanpolat/jdk-8u112-windows-x64/

или

git clone https://bitbucket.org/ramazanpolat/jdk-8u112-windows-x86
13
задан halfer 10 June 2014 в 13:30
поделиться

9 ответов

Руководство для начинающих по 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]

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

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

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)
}

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

23
ответ дан 1 December 2019 в 17:55
поделиться

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

7
ответ дан 1 December 2019 в 17:55
поделиться

Использование перезаписи мода:

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

6
ответ дан 1 December 2019 в 17:55
поделиться

Помните, что перенаправление - это не то же самое, что перезапись.

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

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

3
ответ дан 1 December 2019 в 17:55
поделиться

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

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

2
ответ дан 1 December 2019 в 17:55
поделиться

Извините за то, что не дал вам подробного объяснения,

1
ответ дан 1 December 2019 в 17:55
поделиться

К сожалению, это действительно зависит от веб-сервера, а не от 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.

1
ответ дан 1 December 2019 в 17:55
поделиться

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

1
ответ дан 1 December 2019 в 17:55
поделиться

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

1
ответ дан 1 December 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: