.htaccess url переписать querystring

Хорошо, я читал и искал некоторые из них, но не нашел ответа на мой вопрос или, может быть, слишком нового для перезаписи url и просто не могу понять это. Вот что я пытаюсь выполнить:

У меня есть таблица, содержащая описание и идентификатор каналов, идентификатор используется для определения содержимого, чтобы показать, поэтому у меня есть что-то подобное в моем URL-адресе

http://www.mysite.com/page?channel=1 

теперь то, что я хотел бы сделать, это показать это:

 http://www.mysite.com/page/description 

и все же сможете каким-то образом получить идентификатор этого описания, чтобы отобразить соответствующий контент. надеюсь, это имеет смысл. Единственное, о чем я думал, находится в верхней части моей страницы:

 select * from channels where description = $_GET['description'] 

и вернуть это значение id, а затем использовать его. Это будет единственный путь? или достаточно .htaccess? такой noob 🙁

EDIT: это сейчас в моем htaccess:

 AddType x-mapp-php5 .php Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / ## hide .php extension # To externally redirect /dir/foo.php to /dir/foo RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R,L,NC] ## To internally redirect /dir/foo to /dir/foo.php RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_URI}.php [L] ##This is to redirect just stream page only RewriteRule ^stream/(.+)/([0-9]+)$ /stream.php?channel=$1 

Если вы хотите получить идентификатор, вы должны сделать следующее:

  1. Включить mod_rewrite модуль apache
  2. Создать .htaccess в каталоге DocumentRoot.
  3. Вставить следующий:

     RewriteEngine On RewriteRule ^([0-9]+)$ /page.php?channel=$1 
  4. Когда вы будете следовать URL-адресу:

http://www.mysite.com/1

вы получаете контент как из URL:

http://www.mysite.com/page?channel=1

Существует несколько способов сделать это.

Использование архитектуры MVC в вашем приложении заставит вас использовать логику маршрутизации в той или иной форме .

То, что вы специально хотите, может быть сделано несколькими способами, включая apache RewriteMap .

Я лично разработал свое приложение таким образом, чтобы он получал URI и направлял их на контроллер / страницу. Это гарантирует, что PHP продолжает полностью контролировать то, что наконец отображается для запроса.

Предполагая, что вам поручено украшать ваши ссылки, не затрагивая большую часть приложения, вам нужно найти способ отображения /page/description в /page?channel=1 .

Для этой уникальной ситуации я бы использовал нечто похожее на шаблон декоратора , потому что по существу ваша задача не нуждается в изменении существующей кодовой базы:

.htaccess

 RewriteEngine On RewriteRule ^.*$ router.php [NC,L] 

router.php

 include'config.php';// remove your config loading from index.php $request = $_SERVER['REQUEST_URI']; $request = explode('/', $_request); # in $request you will have all the uri segments now /* complex logic to find out what page you're on */ # assuming we found out it's page/description $_GET['channel'] = 1;// or getIdFromDescription($request[2]) # this forces the environment to believe it got a request with ?channel=1 # revert to your old request with injected environment include'index.php'; 

Предпосылка здесь заключается в том, что index.php может загружать ваши старые страницы. И вам просто нужно изменить способ доступа к ним. Таким образом, вы используете маршрутизатор для сопоставления нового запроса со старым запросом.

Это не идеально, но хорошо работает на плохо разработанных приложениях.

ЗАМЕТЬТЕ ПРИМЕЧАНИЕ. Моя текущая реализация не обрабатывает статические ресурсы (изображения, css, js и т. Д.).