В настоящее время у меня есть весь сайт, работающий на переменных 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