.htaccess переписывание URL с помощью php

В настоящее время у меня есть весь сайт, работающий на переменных PHP и GET.

Мои ссылки выглядят так

http://www.example.co.uk/brochure.php?cat_path=24 

И иногда он имеет вторую переменную в URL-адресе …

Я бы хотел, чтобы мои URL-адреса выглядели следующим образом: http://www.example.co.uk/Concrete_Fence_Posts

Поэтому мои вопросы просто: как мне переписывать URL-адреса, не нарушая мои переменные GET.

Благодарю.

Предполагая, что ваши параметры всегда называются cat_path и product_id (если они существуют), вы можете сделать что-то вроде этого:

 RewriteRule ^([^/]+)/([\d+])$ $1.php?cat_path=$2 RewriteRule ^([^/]+)/([\d+])/([\d+])$ $1.php?cat_path=$2&product_id=$3 

Затем ваши URL-адреса будут в одном из следующих форматов:

 pagename/cat_path pagename/cat_path/product_id 

Например:

 http://www.bentinckfencing.co.uk/brochure/24 http://www.bentinckfencing.co.uk/product/35/54 

Изменить. Я вижу, что вы хотите использовать имена продуктов в URL-адресе. В этом случае ваши PHP-скрипты должны будут иметь возможность принимать имя в качестве параметра и искать идентификатор. Вы должны продолжать принимать идентификатор напрямую, чтобы не нарушать существующие ссылки. Тогда ваше правило перезаписи будет выглядеть так:

 RewriteRule ^([^.]+)$ brochure.php?name=$1 

И http://www.bentinckfencing.co.uk/Concrete_Fence_Posts переписываются на http://www.bentinckfencing.co.uk/brochure.php?name=Concrete_Fence_Posts .

Недавно я ответил на аналогичный вопрос:
Как я могу использовать в .htaccess?
полное решение для перемещения по новым URL-адресам

Для лучшего поиска поисковая оптимизация имеет URL-адреса, такие как stackoverflow –

 http://www.bentinckfencing.co.uk/brochure/24/concrete-fence-posts 

Есть что-то вроде поисковых систем, которые не хранят, что есть после ? в ваших URL-адресах. Это окончание concrete-fence-posts также помогает пользователям идентифицировать страницу в адресной строке браузера. Но вы не можете разрешить определенные специальные символы, если ? не используется в URL-адресе. Символы, как / , % будут разорвать URL, а \ , # , + не будут отображаться.

Обновления

Вы хотите полностью перейти от передачи идентификатора к передаче имени? Я не уверен, насколько это хорошо, но я слышал, что несколько известных сайтов имеют такие URL-адреса. Но, возможно, вам придется сделать много изменений в зависимости от вашего проекта (сколько у вас модулей). Однако URL-адрес стиля stackoverflow сохранит выбор элемента на основе идентификатора.

Дальнейшие обновления
Вы можете попробовать это правило перезаписи иметь как ID, так и имя в URL (стиль stackoverflow): –

 RewriteRule ^([a-z0-9\-\_]+)/([0-9]+)/([a-z0-9\-\_]+)/?$ $1.php?cat_path=$1&cat_name=$2 

Однако я его не тестировал.

Еще одна важная вещь, я вижу, что ваш код напрямую входит в brochure.php и нет общего файла (общего контроллера), который выполняется в случае всех модулей. Такой подход может иметь множество недостатков, особенно если ваше приложение от среднего до большого. Всегда лучше выполнять общий файл index.php и включать туда необходимый файл brochure.php чтобы вы могли выполнять все эти общие логики (необходимые во всех ваших модулях) в этом файле index.php . У меня есть общий файл index.php, и следующие правила перезаписи делают то же самое:

 ############To remove display of "index.php" from URL RewriteCond $1 !^(index\.php|resources|robots\.txt) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA] #################################################end of hiding index.php RewriteRule ^([a-z0-9\-\_]+)/([0-9]+)/([a-zA-Z0-9\-\_]+)/?$ index.php?a=$1&b=$2&c=$3 

Примечание. – Первый блок правил перезаписи скрывает index.php от URL-адреса, и посетитель не знает, что мое приложение работает на PHP.

Наконец, у меня есть URL-адреса:

 http://www.bentinckfencing.co.uk/brochure/24/concrete-fence-posts 

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