Название страницы в URL с .htaccess и Php

Я целый день бился головой о стену, но не мог понять, как сделать, чтобы мой URL-адрес отображал заголовок страницы в URL-адресе вместо всех параметров запроса.

Я просто хочу преобразовать мой этот URL

http://www.def.com/post.php?id=1

to

http://www.def.com/my-page-title.html

Я прочитал много статей и особенно вопросов по SO, но ни один из них не отвечал на это. У меня недостаточно репутации, чтобы размещать здесь другие подобные ссылки.

Я просто хочу получить название своей страницы и показать его в своем URL-адресе.


person NoOneSeesMe    schedule 28.01.2015    source источник
comment
Какой код вы используете до сих пор? Показ некоторых исследований помочь каждому.   -  person Rémi    schedule 28.01.2015
comment
Может возникнуть путаница, если у вас действительно есть файл .html, такой как index.html. Вы можете запустить правило перезаписи, которое соответствует любой странице .html и отправляет имя страницы в php-скрипт, который будет искать сообщение по имени.   -  person Devon    schedule 28.01.2015
comment
Вот учебник по дружественным для поисковых систем URL-адресам — он может стать для вас хорошей отправной точкой code.tutsplus.com/tutorials/   -  person Kelvin    schedule 28.01.2015
comment
Я уже пробовал это, но не мог понять, как php отправляет заголовок обратно на URL-адрес.   -  person NoOneSeesMe    schedule 28.01.2015


Ответы (1)


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

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

После этого вы должны заставить /route-page.php (как бы вы его ни назвали) прочитать URI: $_SERVER['REQUEST_URI'], проанализировать "/my-page-title.html" и выяснить, как загрузить правильный страница оттуда.

route-page.php

<?php
    $path = $_SERVER['REQUEST_URI'];
    //query for row of data with that path...
    //output results

Поскольку имя вашей фактической страницы может содержать символы, лучше всего, если у вас есть ожидаемый путь «my-page-title.html» в проиндексированном столбце вашей базы данных. Таким образом, вы можете быстро получить страницу на основе пути. Кроме того, поскольку все ненайденные URL-адреса ведут на эту страницу, вам необходимо вручную обрабатывать ошибки 404 (т. е. если вы не найдете страницу, соответствующую указанному пути, выведите ошибку 404):

if( $pageNotFound ) {
    header("HTTP/1.0 404 Not Found");
    echo("<h1>Page Not Found</h1>");
}
person Kevin Nelson    schedule 28.01.2015