Я не знаю, правильно ли слово «необязательные параметры» описывает мою ситуацию.Вот что мне нужно.
Я написал следующее правило для перенаправления 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
Есть идеи?
Используйте это правило - оно сделает 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
Я заменил A-Za-z на a-z в шаблоне, поскольку у вас уже есть флаг [NC] (игнорировать регистр).
A-Za-z
a-z
[NC]
Имейте в виду, что такого рода URL в целом не годятся с точки зрения SEO - я настоятельно рекомендую использовать <link rel="canonical" href="PROPER_URL" /> для указания правильного URL, чтобы избежать штрафов за дублирование контента со стороны поисковой системы:
<link rel="canonical" href="PROPER_URL" />
Эта «необязательная» часть будет потеряна / не будет передана на новый URL - в соответствии с запросом.