У меня есть RewriteMap определяется следующим образом:
Код: Выделить всё
RewriteMap product_map txt:/path/to/product_map.txt
Код: Выделить всё
55-55f /tv-backlight/55-55f
65-65ju /tv-backlight/65-65ju
- Извлечь ключ продукта из URL-адреса (например, 55-55f).< /li>
Найдите ключ продукта в RewriteMap, чтобы получить соответствующий основной URL-адрес. - Сравните текущий REQUEST_URI с полученным основной URL-адрес из RewriteMap.
- Примените статус 410 Gone для любого URL-адреса, который не соответствует основному URL-адресу.
Попытка 1: использование базового RewriteCond
Код: Выделить всё
RewriteCond %{REQUEST_URI} ^.*/([^/]+)$
RewriteCond ${product_map:%1|NOT_FOUND} !=NOT_FOUND
RewriteCond %{REQUEST_URI} !=${product_map:%1|NOT_FOUND}
RewriteRule ^ - [G,L]
- Ожидается: он должен извлечь ключ продукта, получить основной URL-адрес и сравнить их.
- Результат: Ошибка, поскольку ${product_map:%1|NOT_FOUND в правой части RewriteCond не оценивается. Apache обрабатывает ${product_map:%1|NOT_FOUND} как литеральную строку.
Код: Выделить всё
RewriteCond %{REQUEST_URI} ^.*/([^/]+)$
RewriteCond ${product:%1|NOT_FOUND} ^(.*)$
RewriteCond expr "%{REQUEST_URI} != %2"
RewriteRule ^ - [G,L]
- Ожидается: он должен извлечь ключ продукта, получить основной URL-адрес и сравнить их.
- Результат: Ошибка, поскольку %2 в правой части RewriteCond не оценивается. Apache рассматривает %2 как литеральную строку.
Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-apache
Мобильная версия