Пробовал самостоятельно разобраться, но не повезло.URL rewrite (routing), mod_rewrite или PHP
У меня есть веб-сайт (PHP, Apache), со следующей структурой, в качестве образца:
1. http://hostname/
2. http://hostname/category?list=listname
3. http://hostname/product?id=...&name=productname
4. http://hostname/recipes
5. http://hostname/recipe?id=...&name=recipename
+ many others.
Текущий .htaccess является:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
Так примеры http://hostname/category?list= ... становится /category.php?list ... И затем он ловит скрипт php и работает.
Я хочу, чтобы дружественные URL, как эти:
1. http://hostname/
2. http://hostname/category/listname/
3. http://hostname/product/productname/
4. http://hostname/recipes/
5. http://hostname/recipe/recipename/
А с другой стороны, предыдущие URLs должно работать, как Webiste является чрезвычайно индексируются поисковыми enginges. Поэтому из URL-адресов oldstyle необходимо 301 перенаправить на новые URL-адреса. Любые идеи? У всех моих усилий были ошибки. Я даже пытался сделать PHP-маршрутизацию через точку входа index.php, но я не могу понять, как обращаться со старыми ссылками.
Спасибо за Помогите. 'RewriteCond% {THE_REQUEST}^GET \ (категория | продукт | рецепт) (?: \. Php)? \?. * (Name | list) = ([^ & \ s] +) [NC]' работает только без^GET \. не могут отключить мультивизы, настройки хостинга не позволяют это делать. все остальное работает так, как полагают. Что делает [NC] и [L] в этих случаях? – Zergius2
'NC' означает сопоставление капитальных/малогабаритных букв. 'L' означает, что они не обрабатывают дальнейшие правила. Подробнее о флагах здесь: https://devdocs.io/apache_http_server/rewrite/flags @ Zergius2 Я пропустил ведущий '/' в этом 'RewriteCond'. – hjpotter92