Перенаправление URL — адресов с помощью htaccess-тоже с помощью mysql

#.htaccess #mod-rewrite

Вопрос:

Мне нужно изменить URL-адреса на моем веб-сайте с

 http://www.example.com/games.php?game=600
 

Для

 http://www.example.com/games/gamename 
 

«имя игры» — это поле в базе данных MySQL.

я рисую это так на заголовке страницы <?=$data['enname']?>

Я думаю, мне нужно сделать это в .htaccess файле с RewriteRule

но я не знаю, как именно

кто-нибудь может помочь?

Комментарии:

1. Правило перезаписи в .htaccess может передать имя в вашем красивом URL-адресе сценарию путем вызова /games.php?name=gamename , но я не могу обрабатывать запросы в базе данных. Можете ли вы подробнее рассказать о том, что вы пробовали и с какими конкретными ошибками столкнулись?

Ответ №1:

То, что вы предлагаете, невозможно в .htaccess одиночку — откуда 600 ожидается, что это произойдет? Чтобы сделать это в .htaccess одиночку, 600 необходимо будет присутствовать в запрошенном URL. например. /games/600/gamename

Затем вы могли бы сделать что-то вроде следующего, .htaccess чтобы сопоставить /games/600/gamename с /games.php?game=600 :

 Options -MultiViews

RewriteEngine On

RewriteRule ^/games/(d )/ games.php?game=$1 [L]
 

ПРИМЕЧАНИЕ: Здесь необходимо отключить многовидовые просмотры, так как вы используете сегмент URL-пути, который напрямую сопоставляется с базовым именем существующего файла. т. е. /games и /games.php . Если бы мультивидение было включено, то /games.php оно вызывалось бы (с помощью mod_negotiation) без каких-либо параметров URL.

В противном случае, если вы хотите использовать URL /games/gamename -адрес (без «идентификатора»), вам понадобится внешний контроллер. например. Перепишите все запросы games.php (как и раньше), но затем выполните поиск gamename в вашей базе данных (для получения «идентификатора») с помощью PHP и предоставьте соответствующий контент.

Например:

 Options -MultiViews

RewriteEngine On

RewriteRule ^/games/([w-] )$ games.php?gamename=$1 [L]
 

Обратите внимание на изменение параметра URL. «Имя игры» передается вашему сценарию вместо «идентификатор». Затем вы ищете «идентификатор» игры в своем games.php сценарии, чтобы предоставить соответствующий контент.

ОБНОВЛЕНИЕ: Очевидно, для этого требуется, чтобы «имя игры» было уникальным (и индексированным) полем в вашей базе данных. Если нет, то у вас нет другого выбора, кроме как включить «идентификатор» (например 600 ) в запрошенный URL-адрес, как упоминалось в первой половине моего ответа.

Комментарии:

1. 600 — это идентификатор игры в базе данных sql

2. @yogev Хорошо, но вы также заявили: «»имя игры» — это поле в базе данных MySQL». Если «имя игры» не является уникальным, то «идентификатор» (т. е. 600 ) должен присутствовать в исходном URL — адресе-как указано в первой части моего ответа. (Я обновил свой ответ, чтобы прояснить это.)

3. @yogev, пожалуйста. Если мой ответ помог, пожалуйста, отметьте его как «принято» (галочка слева под стрелками для голосования), чтобы помочь другим читателям, удалите его из очереди вопросов без ответа и покажите свою признательность :). Когда у вас будет более 15 представителей, вы также сможете озвучивать ответы, которые сочтете полезными. Спасибо, очень признателен. 🙂