У меня есть около 25000 URL-адресов с моего старого сайта, в которых есть abc.
Я хочу использовать 3 файла DBM в моем apache conf .
Цель состоит в том, если URL не содержит abc, т.е. http://example.com/1234.htm
, то я не хочу, чтобы просматривался файл abcredirects.DBM.
Если URL действительно содержит abc, т.е. http://example.com/abc1234. htm
, то я хочу, чтобы просматривался только файл abcredirectsDBM.
Я пытаюсь использовать оператор if в моем Apache, однако каждый раз, когда я использую блок
, все, что я помещаю внутрь, кажется следует игнорировать.
Я изменил строку
разными способами, но это не имеет значения. Если я удалю блок
, все перенаправления будут работать должным образом.
Почему мой блок
игнорируется? Ошибки нет, и согласно журналам http://example.com/abc1234.htm
(я предполагаю) не соответствует истине, поэтому я не уверен, что еще проверить.
[root@mail conf]# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built: Jun 27 2018 13:48:59
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteMap abcredirects "dbm:/etc/httpd/conf/dbm/abcredirects.dbm"
<If "%{REQUEST_URI} =~ m#^abc#">
RewriteCond ${abcredirects:$1} !=""
RewriteRule ^(.*) /${abcredirects:$1} [R=301,L]
</If>
RewriteMap shortalias "dbm:/etc/httpd/conf/shortalias.dbm"
RewriteCond ${shortalias:$1} !=""
RewriteRule ^(.*) /${shortalias:$1} [R=301,L]
</IfModule>
<VirtualHost *:80>
DocumentRoot /var/www/sites/me
ServerName example.com
DirectoryIndex index.htm
Options +FollowSymLinks
RewriteEngine On
RewriteOptions Inherit
RewriteMap otherredirects "dbm:/etc/httpd/conf/otherredirects.dbm"
RewriteCond ${otherredirects:$1} !=""
RewriteRule ^(.*) /${otherredirects:$1} [R=301,L]
</VirtualHost>
Serverfault вопросы, которые я видел и пробовал:
apache force, если url имеет определенный шаблон перенаправления на https
Переменная сервера REQUEST_URI
всегда начинается с косой черты (начало URL -path), поэтому регулярное выражение m # ^ abc #
здесь никогда не будет совпадать. Вместо этого вам нужно будет использовать регулярное выражение m # ^ / abc #
. (Предполагая, что это не был один из «разных способов», которые вы уже пробовали?)
Я бы также избегал разделения вашей конфигурации между vHost и сервером - если для этого нет особых требований? Это усложняет ситуацию с mod_rewrite, поскольку директивы в контексте virtualhost обычно переопределяют директивы в контексте server , поэтому вам необходимо использовать наследование mod_rewrite (что вы и делаете) - но это становится излишне беспорядочным. (Параметр наследовать
наследует родительские директивы за текущим контекстом, что может быть не тем, что вы ожидаете.)
Остальная часть вашего вопроса кажется чтобы перейти к вашему более свежему вопросу: