Я пытаюсь написать файл .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.