как генерировать ссылки в php? - PullRequest
0 голосов
/ 06 октября 2010

Это очень простой вопрос, но я не могу ничего найти в Google, хм.

Во всяком случае, я не имею в виду создание ссылок, я говорю о создании ссылок, таких как site.com/1 или , как генерировать ссылки в php? , числа после URL хранятся в база данных с соответствующим постом например. Как мне сгенерировать их с помощью php?

Если я захожу на h ** p: //site.com/questions/3870639/how-to-generate-links-in-php, как я могу сказать серверу запросить базу данных и получить соответствующую запись 3870639? (без htaccess).

Ответы [ 6 ]

2 голосов
/ 06 октября 2010

Вы должны использовать .htaccess.

Вы можете реализовать URL-адреса такого типа, перенаправив все запросы в определенный файл.Это ваш Front Controller , и он будет разлагать URL, извлекать информацию и выполнять или делегировать необходимые действия.С фронтальным контроллером у вас есть единая точка входа на ваш сайт.

Но вам нужно настроить .htaccess для пересылки всех запросов в этот файл, например

 RewriteRule ^(.*)$ index.php [QSA,L]

Вам следует проверить различные фреймворки, такие как Symfony или Zend, которые реализуют этот шаблон.

2 голосов
/ 06 октября 2010

Это невозможно только с PHP, для этого требуется серверный модуль Apache с именем mod_rewrite (при условии, что вы используете Apache для своего сервера). Google для этого.

1 голос
/ 06 октября 2010

Я не уверен, как вы скажете серверу перейти на страницу, если вы перейдете в каталог 3870639, которого там не было.Я бы обычно использовал htaccess для перенаправления на page.php или аналогичный и использовал $ _SERVER ['REQUEST_URI'], чтобы получить URL-адрес страницы, или преобразовал URL-адрес в переменную $ _GET в htaccess, который вы затем можете разделить ('/', $_SERVER ['REQUEST_URI']) для получения массива каталогов.

$directories = split('/',$_SERVER['REQUEST_URI']);
print_r($directories);

дает

array(
   [0] => 'site.com',
   [1] => 'questions',
   [2] => '3870639',
   [3] => 'how-to-generate-links-in-php'
)

Но, как я уже сказал, понятия не имею, как попасть на эту страницу.

0 голосов
/ 06 октября 2010

Я не думаю, что это возможно только с помощью PHP. Вы должны использовать mod_rewrite (который вы не хотите использовать) или изменить файл ошибки 404 по умолчанию на index.php. Затем в index.php вы можете использовать explode('/', $_SERVER['REQUEST_URI']) для получения идентификатора из URL.

Но другой способ сделать это - использовать URL (я не уверен, что это сработает, но я думаю, что где-то видел) http://site.com/index.php/questions/3870639/how-to-generate-links-in-php

0 голосов
/ 06 октября 2010

Использование mod_rewrite было бы лучшим решением, но если вы не можете его использовать, вы все равно можете добиться чего-то подобного, используя MultiViews . Вам, однако, все еще нужно было бы его включить (обычно это делается через .htaccess или Apache conf).

MultiViews предназначен для разрешения согласования содержимого, поэтому вы можете запросить / images / banner, и Apache возвращает соответствующий тип (banner.png, banner.svg и т. Д.) В зависимости от заголовка Accept браузера. Вы можете использовать это, чтобы скрыть расширение ваших скриптов, что позволит вам изменить технологию запуска вашего сайта без изменения ваших URL.

В вашем случае вы можете использовать

/ вопросов / 3870639 / как к порождающим сшивкам-в-PHP

который будет таким же, как

/ questions.php / 3870639 / как к порождающим сшивкам-в-PHP

В пределах questions.php $_SERVER["PATH_INFO"] будет содержать /3870639/how-to-generate-links-in-php (или вы можете проанализировать $_SERVER['REQUEST_URI'], как упоминает BenWells). Используйте explode() или регулярное выражение, чтобы получить только идентификатор.

0 голосов
/ 06 октября 2010

Преобразование текста. Напишите регулярное выражение, которое определит URL-адрес и преобразует его в <a href="$1">$1</a>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...