В настоящее время я работаю над блоком, где я хотел бы создавать ссылки на отдельные статьи в следующей форме:
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 и обработал его соответствующим образом. Но как мне это сделать с предложенной структурой в начале этого вопроса?
Вам понадобятся несколько вещей:
Установите .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
Теперь вы хотите обработать URL-путь, чтобы вы могли использовать переменную PHP $_SERVER['REQUEST_URI']
как вы уже упоминали.
Из этого достаточно проанализировать результат, чтобы извлечь нужную вам информацию, вы можете использовать одну из функций 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
и это ваша точка входа.