htaccess regex não processa URLs corretamente

2

Estou tentando redirecionar (ou 'reescrever') mais de 3000 URLs para um site onde atualizamos o SEF da maioria das páginas de conteúdo para remover um número de ID que não era necessário / desejado. Este deve ser um processo simples usando regex; no entanto, estou aprendendo que regex e htaccess são mais 'art' do que ciência: - (

Aqui está a regra que tenho:

RewriteRule ^topics\/([-0-9a-zA-Z]+)?\/([0-9]+)(-)([0-9a-z,-]+)? http://example.net/topics/$1/$4 [L,R=301]

A maioria dos URLs é assim:

http://example.net/topics/management/6309-investing-proceeds-from-sale-of-a-farm-or-ranch

e trabalhe bem com o regex; No entanto, se um artigo começar com um número, terá um URL como este:

http://example.net/topics/management/3542-9-new-years-resolutions-for-cattle-producers

Então o regex (acima) está pegando mais do que apenas o primeiro conjunto de 4 dígitos de ID e também está pegando o primeiro número (neste caso, "9") que deve ser deixado, resultando nisso:

http://example.net/topics/management/new-years-resolutions-for-cattle-producers

O que obviamente não funciona.

Além disso, como uma solução alternativa, tentei criar algumas regras personalizadas para lidar apenas com as poucas páginas / URLs que têm esse formato (com um número no início do título do artigo), com uma regra à frente do regra de regex como esta:

Redirect 301 /topics/management/3542-9-new-years-resolutions-for-cattle-producers http://example.net/topics/management/9-new-years-resolutions-for-cattle-producers

ou

RewriteRule ^topics\/([-0-9a-zA-Z]+)?\/([0-9]{1,4}?)(-)([0-9,a-z,-]+)? http://example.net/topics/$1/$4 [L,R=301]

No entanto, quando faço isso, a regra regex (mais abaixo no arquivo htaccess) ainda é executada, resultando na remoção do "9".

Eu testei isso em muitos sites diferentes de testes de regex e htaccess e todos eles funcionam; no entanto, continua a falhar no servidor ao vivo.

O servidor da web é: Apache / 2.2.25 (Unix) mod_hive / 4.0 mod_ssl / 2.2.25 OpenSSL / 1.0.0-mods mod_bwlimited / 1.4 mod_fcgid / 2.3.6

E eu já entrei em contato com meu servidor / empresa de hospedagem e eles dizem que não têm o conhecimento necessário para resolver esse problema.

Alguém pode ver onde o problema está aqui? Eu pesquisei centenas de postagens no fórum aqui e em outros lugares, sem que ninguém tenha o mesmo problema.

    
por Chris Paschen 15.04.2015 / 15:47

1 resposta

0

Acabei de testar sua configuração com uma pequena alteração em relação à sua configuração. Eu estou configurando isto no arquivo de configuração ao invés de .htaccess usando isto (note que ele procura por início com / topics - em vez de tópicos -):

RewriteRule ^/topics\/([-0-9a-zA-Z]+)?\/([0-9]+)(-)([0-9a-z,-]+)? http://example.net/topics/$1/$4 [L,R=301]

Em seguida, o teste funciona como esperado:

[root@proxy conf]# curl -i http://localhost/topics/management/3542-9-new-years-resolutions-for-cattle-producers
HTTP/1.1 301 Moved Permanently
Date: Wed, 15 Apr 2015 14:48:09 GMT
Server: Apache
Location: http://example.net/topics/management/9-new-years-resolutions-for-cattle-producers
Content-Length: 289
Content-Type: text/html; charset=iso-8859-1

EDIT1:

Por favor, tente este:

RewriteRule ^topics\/([-0-9a-zA-Z]+)?\/(\d+)(-)([0-9a-z,-]+)? http://example.net/topics/$1/$4 [L,R=301]

Em vez de usar ([0-9]+) para os números antes de o primeiro traço ser substituído por (\d+) , na minha configuração ainda funciona, talvez em seu (\d+) faça sua compilação do apache mais confortável.

    
por 15.04.2015 / 16:52