Создание динамических URL-адресов в htaccess

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

Мой URL обычно выглядит так:

view.php?mode=prod&id=1234 

То, что я хотел бы сделать, это взять идентификатор из URL-адреса, выполнить запрос к базе данных, а затем поместить заголовок, возвращенный из БД, в URL-адрес. что-то вроде:

 /products/This-is-the-product-title 

Я знаю, что некоторые люди достигли этого с помощью URL-адресов и тем форума форума phpbb, и я попытался отслеживать код до того места, где он заменяет фактический URL с новым URL-адресом строки заголовка, но не повезло.

Я знаю, что могу переписать URL-адрес только с идентификатором:

 RewriteRule ^view\.php?mode=prod&id=([0-9]+) /products/$1/ 

Есть ли способ в PHP переписать отображаемый URL?

На данный момент вам интересно, как преобразовать ваш уродливый URL (например, /view.php?mode=prod&id=1234 ) в красивый URL (например, /products/product-title ). Начните смотреть на это наоборот.

Вы хотите, чтобы кто-то печатал /products/product-title чтобы на самом деле взять их на страницу, доступ к которой можно получить с помощью /view.php?mode=prod&id=1234 .

т.е. ваше правило может быть следующим:

 RewriteRule ^products/([A-Za-z0-9-])/?$ /view.php?mode=prod&title=$1 

Затем в view.php выполните поиск, основанный на title чтобы найти id . Затем продолжайте, как обычно.

Один из способов сделать это будет таким же, как и большинство инфраструктур mvc. Вы можете перенаправить все свои страницы в один файл index.php, и вы используете свой скрипт для определения загружаемой страницы.

.htaccess

 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L] </IfModule> 

и ваш php-файл будет иметь такой скрипт, как этот:

  // get the url $uri = (isset($_SERVER['REQUEST_URI']))?$_SERVER['REQUEST_URI']: false; $query = (isset($_SERVER['QUERY_STRING']))?$_SERVER['QUERY_STRING']: ''; $url = str_replace($query,'',$uri); // you can edit this part to do something with the query $arr = explode('/',$url); array_shift($arr); // get the correct page to display $controller =!empty($arr[0])?$arr[0]:'home'; // $arr[0] could be product/ $action = isset($arr[1]) && !empty($arr[1])?$arr[1]:'index'; // $arr[1] can be product-title } 

конечно, вам придется работать с этим кодом для модуляции вашего приложения

надеюсь, это поможет

Один из способов – вывести заголовок Location:, чтобы перенаправить выбранный URL.