.htaccess переписать URL-адреса - RewriteMap

У меня есть следующая функция RewriteMap:

RewriteMap map_company txt:/var/www/vhost/domain.com/httpdocs/map_company.txt

Я пытаюсь переписать свой index.php? Shop_id=1 в / company-name/

поэтому мой файл map_company.txt содержит: company-name 1

Я не могу заставить его работать. Вот мой файл htaccess:

# tried this
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?shop_id=${map_company:$1} [NC,L,QSA]

#and this
RewriteRule ^(\d+)/$ index.php?shop_id=${map_company:$1} [NC,L,QSA]

Если я это сделаю, то получу ошибку: Файл не существует: /var/www/vhosts/domain.com/httpdocs/company-name

У кого-нибудь есть какие-либо идеи? Я также должен убедиться, что это не влияет на мои стандартные папки, такие как "css, js, images".

2 ответа

Решение

Вы включили механизм перезаписи? RewriteEngine on должен быть определен. Также проверьте, есть ли у вас необходимые AllowOverride значение для этой папки, чтобы позволить вам сделать это.

Кроме того, я хотел бы сделать косую черту необязательной:

RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?shop_id=${map_company:$1} [NC,L,QSA]

Похоже, вы не можете объявить RewriteMap в файле.htaccess:

Директива RewriteMap не может использоваться в разделах или файлах.htaccess. Вы должны объявить карту в контексте сервера или виртуального хоста. Вы можете использовать карту после ее создания в ваших директивах RewriteRule и RewriteCond в этих областях. Вы просто не можете объявить это в этих сферах.

https://httpd.apache.org/docs/2.4/rewrite/rewritemap.html

Другие вопросы по тегам