Как изменить URL-адрес с чего-то. Php? Var = val на что-то более читаемое / дружественное?

1

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

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

Конкретным примером является страница элемента, где есть ссылки на элементы в форме /dir/page.php?itemno=val, где val приходит из базы данных, а текст, который я хотел бы заменить, исходит из таблицы val в.

$getNames = $db->prepare("
    SELECT val, name
        FROM items
");
$getNames->execute();

Результат может выглядеть так:

val | name
 1  | john
 2  | bill
 3  | anna
 4  | tomm
 5  | sara
... | ...

Как я могу переписать URL-адрес таким образом, чтобы это произошло?

/dir/page.php?itemno=1 becomes /dir/page/john/
/dir/page.php?itemno=2 becomes /dir/page/bill/
/dir/page.php?itemno=3 becomes /dir/page/anna/
...

Результирующий набор достаточно мал (20 значений), который я мог бы жестко закодировать, вместо того, чтобы захватывать SQL, но просто, как переписать URL-адреса, ускользает от меня. Я не уверен, как это делается.

  • 1
    Правила mod_rewrite выполняются веб-сервером (apache) и не могут получить доступ к значениям в базе данных. Вы можете сделать URL /dir/page/john/ , но тогда вам придется искать идентификатор в базе данных (я предполагаю, что нет повторяющихся имен).
Теги:
.htaccess
url
mod-rewrite

1 ответ

2
Лучший ответ

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

RewriteEngine on
RewriteRule /dir/page/(.*) /dir/page.php?itemno=$1 [L]

Теперь переход на /dir/page/john фактически загрузит /dir/page.php?itemno=john.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню