Используйте Apache, чтобы перезаписать URL с параметрами базы данных в качестве хороших URL - PullRequest
0 голосов
/ 01 апреля 2020

В течение многих лет наши веб-сайты, управляемые базой данных, имели URL-адреса, которые выглядят следующим образом: https://www.example.com/product?id=30

Но в настоящее время, особенно в целях SEO, мы хотим, чтобы наши URL-адреса были "хорошими" и выглядит так: https://www.example.com/30/myproduct

Мы используем Zope 2.13.x, работающий на Debian и использующий Apache 2.4 в качестве интерфейсного веб-сервера. Я знаю, что не слишком много людей используют Zope, но используя mod_rewrite Apache, мы сможем прокси переписать и иметь хорошие URL, которые по-прежнему передают аргументы базы данных, необходимые для правильного обслуживания страниц конечным пользователям.

Раньше была кулинарная книга Zope, где я написал кучу действительно подробных учебных пособий по функциональности Zope, но их больше не существует, и я хотел поделиться этим с сообществом SE.

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

Для полной прозрачности я Я собираюсь ответить на свой вопрос, чтобы он был задокументирован для всех.

1 Ответ

0 голосов
/ 01 апреля 2020

Используя механизм перезаписи в Apache, определите, как вы хотите, чтобы ваши URL выглядели для конечного пользователя в их веб-браузере.

Например, если вы звоните в базу данных и у вас есть URL, который выглядит как

https://www.example.com/products?id=30&product_name=myproduct

, но вы хотите, чтобы этот URL выглядел как

https://www.example.com/products/30/myproduct

вы бы использовали правило переписывания следующим образом:

RewriteRule ^/products/(.*)/(.*) /products?id=$1&product_name=$2 [L,P,NE,QSA]

Чтобы объяснить это далее:

^/products/(.*)/(.*) говорит, что в любое время осуществляется доступ к domain.com/products, ищите две переменные в следующих именах каталогов, т. е. /(.*)/(.*)

Если бы вы хотели только одну переменную, вы бы сделали ^/products/(.*)

Аналогично, если бы вы хотели три переменные, вы бы сделали ^/products/(.*)/(.*)/(.*)

Оттуда мы должны сказать Apache, как интерпретировать этот URL, чтобы переписать и все же позволить Zope (или любой другой БД, которую вы используете) передавать правильные параметры URL. Эта часть:

/products?id=$1&product_name=$2

Apache теперь возьмет первое (.*) и обработает его как $1. Это займет второе (.*) и будет восприниматься как $2 и т. Д.

Чрезвычайно важна часть в скобках

L = Это заставляет Apache прекратить обработку перезаписи набор правил, если правило соответствует. Это важно, потому что вы не хотите, чтобы Apache запутался и начал пробовать другие изменения.

P = Прокси-запрос. Это гарантирует, что браузер не отображает URL, отличный от https://www.example.com/products/30/myproduct (т. Е. Мы не хотим, чтобы конечный пользователь видел перезаписанный URL как https://www.example.com/products?id=30&product_name=myproduct

NE = Нет, исключая любые символы URL. Вам нужно это чтобы гарантировать, что при переписывании URL-адреса не происходит попытка экранирования специальных символов, таких как $ = &, поскольку они важны для параметров URL-адреса

QSA = Это позволяет существовать нескольким переменным (или параметрам URL-адреса)

Обратите внимание: Очень важно учитывать, как вы хотите, чтобы ваши URL выглядели (красивые URL), потому что это то, что вы хотите представить поисковым системам. Если вы измените структуру URL, эти хорошие URL больше не будет работать, и ваш рейтинг в поисковых системах может снизиться.

...