Apache Se a instrução não estiver funcionando

1

Tenho cerca de 25000 URLs do meu site antigo que têm abc na URL.

Eu quero usar 3 arquivos DBM no meu conf apache.

O objetivo é que o URL não contenha abc, por exemplo. http://example.com/1234.htm , então eu não quero que o arquivo abcredirects.DBM seja visto.

Se o URL não contiver abc, por exemplo. http://example.com/abc1234.htm , só quero que o arquivo abcredirectsDBM seja examinado.

Eu estou tentando usar uma declaração if no meu Apache, mas sempre que eu usar o bloco <If> , tudo o que eu colocar dentro parece ser ignorado.

Alterei a linha <If "%{REQUEST_URI} =~ m#^abc#"> de muitas formas diferentes, mas isso não importa. Se eu remover o bloco <if> , todos os redirecionamentos funcionarão conforme o esperado.

Por que meu bloco <if> está sendo ignorado? Não há erro e, de acordo com os registros, http://example.com/abc1234.htm (estou assumindo) não está sendo avaliado como verdadeiro, então não tenho certeza do que mais verificar.

[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>

Perguntas de falha do servidor que vi e tentei:

força do apache se o url tiver redirecionamento de padrão específico para https

Redirecionar, alterar URLs ou Redirecionar HTTP para HTTPS no Apache - Tudo o que você sempre quis saber sobre as regras do Mod_Rewrite, mas tinha medo de perguntar

    
por Donna Delour 20.11.2018 / 22:06

1 resposta

1

<If "%{REQUEST_URI} =~ m#^abc#">

A variável de servidor REQUEST_URI sempre começa com uma barra (o início do caminho da URL), portanto, a regex m#^abc# nunca corresponderá aqui. Você precisaria usar o regex m#^/abc# . (Assumindo que não foi uma das "maneiras diferentes" que você já tentou?)

Eu também evitaria dividir sua configuração entre o vHost e o servidor - a menos que exista um requisito específico para isso? Isso complica as coisas em relação ao mod_rewrite, pois as diretivas em um contexto virtualhost normalmente substituem as diretivas no contexto servidor , então você precisa empregar a herança mod_rewrite (que você é fazendo) - mas isso fica desnecessariamente confuso. (A opção inherit herda as diretivas pai por trás do contexto atual, que pode não ser o que você está esperando.)

O resto da sua pergunta parece cruzar com a sua pergunta mais recente:

por 21.11.2018 / 22:06