.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».


person Drew    schedule 14.10.2011    source источник
comment
Хотя это и не является причиной ошибки file does not exist, аргументы в вашем файле карты перезаписи map_company.txt меняются местами. Первый аргумент в каждой строке — это значение для сопоставления, а второй — значение замены. http://httpd.apache.org/docs/2.4/rewrite/rewritemap.html#txt   -  person curiouser    schedule 23.04.2018


Ответы (2)


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

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

RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?shop_id=${map_company:$1} [NC,L,QSA]
person daiscog    schedule 14.10.2011
comment
Спасибо за вашу помощь. Да, RewriteEngine включен. Я получаю следующую ошибку: Нет такого файла или каталога: mod_rewrite: не удается получить доступ к тексту Файл RewriteMap /var/www/vhost/domain.com/httpdocs/map_company.txt — хотя файл есть, и я попросил свой хост, и они сказали, что разрешения установлены правильно, поэтому они тоже не знают, что происходит. Что это может быть? - person Drew; 14.10.2011
comment
Как насчет разрешений каталога? Он должен быть исполняемым (как и все родительские каталоги). Вы пробовали переместить файл в другое место? - person daiscog; 14.10.2011

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

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

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

person Tim Beadle    schedule 23.02.2017