2012-06-19 3 views
0

Если у вас есть URL, например, как один следующим образом:Сложение PHP страницу на основе URL

http://www.example.com/400x200 

возможно создать страницу, которая вторит из 400x200, когда пользователь посещает, что URL-адрес с помощью PHP?

Я знаю, как эхо-путь - это достаточно легко (ltrim($_SERVER['PATH_INFO'], '/')), но не знаю, как создать страницу динамически.

Любая помощь будет высоко ценится, заранее спасибо

ответ

1

Запрос URI (/400x200) хранится на сервере superglobal: $_SERVER["REQUEST_URI"].

Вам необходимо принять это и направить URI соответствующим образом. Самый простой сценарий: в вашем index.php, поместите этот код:

$uri = trim($_SERVER["REQUEST_URI"],"/"); 

if (preg_match("/\d+x\d/")) { 
    list($width,$height) = explode("x",$uri); 
    // some logic with the above vars, e.g. include a view script 
} 

Что это делает проверить, имеет ли URI формат {number}x{number}, извлекает числа и сохраняет их в переменных $width и $height. Затем вы можете делать все, что угодно, с переменными.

Для того, чтобы сделать запрос всегда указывать на файл, содержащий этот код, редактировать свой файл .htaccess и поместить в чем-то вроде этого:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

(код .htaccess копируется из проекта Zend Framework по умолчанию , в случае, если кто-нибудь спросит).

+0

Если вы посмотрите на этот PHP http://pastebin.com/SCcNqXH2 – jacktheripper

+0

И этот htaccess http://pastebin.com/Wavs1YaM – jacktheripper

+0

Вместе они, кажется, не дают правильного результата – jacktheripper

0

Сделать это переменную GET как

http://www.example.com?size=400x200 

Затем вы можете получить строку с

$size = $_GET['size']; 

Что я рекомендую вам сделать это, чтобы получить значения на основе разделения или взорваться()

$lw = $size.explode('x',$size); 
$length = $lw[0]; 
$width = $lw[1]; 
//Manipulate the values accordingly like 
echo $length.'x'.$width; 
+0

ОП указывает пример своего URL-адреса в своем вопросе. В вашем примере предполагается, что они хотят/могут изменить URL-адрес для использования строки запроса. – Bojangles

+0

Я пробовал это - вопрос заключается в том, как переписать переменную GET в более короткую форму url – jacktheripper

1

Не знаю, что вы имеете в виду, создавая страницу динамически, но я предполагаю, что использование mod_rewrite - это то, что вам нужно.

В файле .htaccess Вы должны создать некоторые правила, которые будут переписать URL на что-то различимым на Ваш PHP скрипт - как из URL

http://www.example.com/400x200 

получить

http://www.example.com/index.php?param=400x200 

И тогда Вы можете в вашем index.php сценарий do echo $_GET['param']; ...

Google что-то о PHP и mod_rewrite: http://www.google.com/#q=PHP+mod_rewrite

1

Предполагая, что вы используете Apache, это можно сделать, используя что-то, называемое URL rewriting. Создайте файл с именем .htaccess в корневом каталоге, и добавить:

# Turn URL rewriting on 
RewriteEngine on 
Options +FollowSymlinks 

# Rewrite rule 
RewriteRule ^(\d+x\d+)/?$ index.php?dimensions=$1 [L] 

Первые две строки превратить переписывания двигатель на, а третья строка определяет RewriteRule. Первая часть ^(\d+x\d+)/?$ является регулярным выражением того, что часть URL-адреса после домена будет сопоставлена.

Вторая часть index.php?dimensions=$1 - это URI, который будет переписан. Клиент этого не видит, но PHP будет.

Если я в index.php в print_r($_GET) с URL http://localhost/400x300, я получаю это:

Array ([dimensions] => 400x300) 

Это из стандартного $_GET суперглобального массива в PHP и может быть использовано в обычном режиме.URL-адрес переписывания оставляет URL-адрес, как он есть в браузере, но позволяет превратить его в один из используемых PHP с помощью строки запроса.


Чтобы сделать сценарий немного проще в использовании, можно разделить выражение, чтобы получить отдельный X и значения Y:

RewriteRule ^(\d+)x(\d+)/?$ index.php?x=$1&y=$2 [L] 

который даст массив так:

Array ([x] => 400, [y] => 300) 
Смежные вопросы