Необязательные параметры в URL - правило перезаписи - PullRequest
2 голосов
/ 08 августа 2011

Я не знаю, правильно ли слово «необязательные параметры» описывает мою ситуацию.Вот что мне нужно.

Я написал следующее правило для перенаправления URL:

RewriteRule ^product/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)$ product/?sid=$2&pid=$3&title=$1&src=$4 [NC,L]

По сути, это перенаправит что-то вроде

http://localdomain.com/product/Golf-Bats/abc123/def456/stringy

на что-то вроде

http://localdomain.com/product/?sid=abc123&pid=def456&title=Golf-Bats&src=stringy

Я хочу написать правило, которое принимает дополнительное / необязательное / потенциально бесконечное число параметров (// конструкции типа), но все еще перенаправляет на тот же URL.

Это означает, что следующие URL-адреса:

http://localdomain.com/product/Golf-Bats/abc123/def456/stringy
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1/rand2
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1/rand2/rand3
etc.

все должны просто указывать на URL

http://localdomain.com/product/?sid=abc123&pid=def456&title=Golf-Bats&src=stringy

Есть идеи?

1 Ответ

3 голосов
/ 08 августа 2011

Используйте это правило - оно сделает 6-й и последующие сегменты пути «необязательными»:

RewriteRule ^product/([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)/([a-z0-9\-]+)(/.*)?$ product/?sid=$2&pid=$3&title=$1&src=$4 [NC,L]

Это правило будет обрабатывать все эти URL-адреса как одинаковые (перенаправлять на один и тот же URL-адрес):

http://localdomain.com/product/Golf-Bats/abc123/def456/stringy
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1/rand2
http://localdomain.com/product/Golf-Bats/abc123/def456/stringy/rand1/rand2/rand3
  1. Я заменил A-Za-z на a-z в шаблоне, поскольку у вас уже есть флаг [NC] (игнорировать регистр).

  2. Имейте в виду, что такого рода URL в целом не годятся с точки зрения SEO - я настоятельно рекомендую использовать <link rel="canonical" href="PROPER_URL" /> для указания правильного URL, чтобы избежать штрафов за дублирование контента со стороны поисковой системы:

  3. Эта «необязательная» часть будет потеряна / не будет передана на новый URL - в соответствии с запросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...