Создавайте ссылки для сообщений в блогах, похожие на структуру папок

В настоящее время я работаю над блоком, где я хотел бы создавать ссылки на отдельные статьи в следующей форме:

http://www.mysite.com/health/2013/08/25/some-random-title ------ ----------------- | | category title 

Однако я понятия не имею, как этого добиться.

Я нашел что-то, что даст мне URI.

 $uri = $_SERVER["REQUEST_URI"]; 

Затем я продолжу и извлеките необходимые части и сделайте запросы к базе данных. Это может показаться очень глупым вопросом, но я не знаю, как это посмотреть на google (я пытался …), но как именно я буду обрабатывать ссылку?

Я пытаюсь объяснить это шаг за шагом:

Пользователь нажимает на заголовок статьи -> перезагрузка страницы с новым uri -> Где я должен обрабатывать этот новый uri и как? Если путь запроса выглядит так:

index.php?title=some-random-article-title

Я бы сделал это в index.php и прочитал массив $ _GET и обработал его соответствующим образом. Но как мне это сделать с предложенной структурой в начале этого вопроса?

Вам понадобятся несколько вещей:

  1. Установите .htaccess, чтобы перенаправить весь запрос в ваш основной файл, который будет обрабатывать все это, например:

     <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 

    Вышеупомянутый будет перенаправлять весь запрос несуществующих файлов и папок на ваш index.php

  2. Теперь вы хотите обработать URL-путь, чтобы вы могли использовать переменную PHP $_SERVER['REQUEST_URI'] как вы уже упоминали.

  3. Из этого достаточно проанализировать результат, чтобы извлечь нужную вам информацию, вы можете использовать одну из функций parse_url или pathinfo или explode , чтобы сделать это.

Использование parse_url который, вероятно, является наиболее показательным способом:

 $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "https" : "http"; $url = $s . '://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; var_dump(parse_url($url)); 

Вывод:

 ["scheme"] => string(4) "http" ["host"] => string(10) "domain.com" ["path"] => string(36) "/health/2013/08/25/some-random-title" ["query"] => string(17) "with=query-string" 

Таким образом parse_url может легко разбить текущий URL, как вы можете видеть.

Например, используя pathinfo :

 $path_parts = pathinfo($_SERVER['REQUEST_URI']); 

$path_parts['dirname'] вернется /health/2013/08/25/ $path_parts['dirname'] /health/2013/08/25/

$path_parts['basename'] возвращает some-random-title и если бы у него было расширение, он возвращал бы some-random-title.html

$path_parts['extension'] будет возвращать пустой, и если бы он имел расширение, он возвращал .html

$path_parts['filename'] возвращает some-random-title и если бы у него было расширение, он возвращал бы some-random-title.html

Использование взорвать что-то вроде этого:

 $parts = explode('/', $path); foreach ($parts as $part) echo $part, "\n"; 

Вывод:

 health 2013 08 25 some-random-title.php 

Конечно, это просто примеры того, как вы могли его прочитать.

Вы также можете использовать .htaccess для создания определенных правил вместо обработки всего из одного файла, например:

 RewriteRule ^([^/]+)/([0-9]+)/([0-9]+)/([0-9]+)/([^/]+)/?$ blog.php?category=$1&date=$2-$3-$4&title=$5 [L] 

В основном вышеизложенное разбило бы путь URL и внутренне перенаправляло бы его в файл blog.php с соответствующими параметрами, поэтому, используя ваш URL-образец, он перенаправил бы на:

 http://www.mysite.com/blog.php?category=health&date=2013-08-25&title=some-random-title 

Однако в браузере клиента URL-адрес останется прежним:

 http://www.mysite.com/health/2013/08/25/some-random-title 

Существуют и другие функции, которые могут пригодиться в этом, например parse_url , pathinfo как я уже упоминал ранее, серверные переменные и т. Д. …

Это называется семантическими URL-адресами, они также называются скрытыми URL-адресами.

Вы можете сделать это с помощью команды .htaccess RewriteURL

Пример:

 RewriteURL ^(.*)$ handler.php?path=$1 

Теперь handler.php получает /health/2013/08/25/some-random-title handler.php /health/2013/08/25/some-random-title и это ваша точка входа.