.htaccess 301 redirect remove [] da URL

1

Eu quero remover '[' e ']' das URLs e redirecionar para o link correto.

Aqui está um exemplo de URL:

/forums/garage-150/cool-cars-sightings-[archived]-7610/index127.html

Precisa ser redirecionado para:

/forums/garage-150/cool-cars-sightings-archived-7610/index127.html

Aqui está o que eu compus até agora, mas ainda não está funcionando ..

Options +FollowSymlinks
Options +Indexes
RewriteEngine on
RewriteRule ^/forums/(.*)/(.+)\[(.+)\](.+)/(.+)$ /forums/$1/$2$3$4/$5 [R=301]
    
por duterte 13.08.2018 / 16:29

1 resposta

0

Sua diretiva parece OK, exceto se estiver em .htaccess , então você precisará remover o prefixo de barra do padrão RewriteRule . Por exemplo:

RewriteRule ^forums/(.+)/(.+)\[(.+)\](.+)/(.+)$ /forums/$1/$2$3$4/$5 [R=301,L]
As diretivas

RewriteRule em um contexto diretório (que inclui .htaccess ) correspondem ao caminho da URL menor que o prefixo do diretório . O prefixo de diretório sempre termina com uma barra, portanto, o caminho da URL com o qual o padrão RewriteRule é iniciado nunca começa com uma barra.

Você pode precisar adicionar o L flag se você (planeja) tiver mais diretivas. (Eu também alterei o primeiro grupo capturado de .* para .+ , pois uma correspondência de largura zero aqui é impossível.

ATUALIZAÇÃO:

The htaccess where I put this code is in / directory. There is also .htaccess in /forums directory

Se houver um arquivo .htaccess existente no subdiretório /forums que também usa o mod_rewrite, então (por padrão) isso substituirá completamente a diretiva acima (no seu arquivo root .htaccess ). A diretiva acima não será processada.

A maneira mais fácil de resolver isso é mover a diretiva acima para o arquivo /forums/.htaccess (próximo ao topo). Como esse redirecionamento é específico para o fórum, essa também parece ser a abordagem mais lógica. No entanto, você também precisa alterar o padrão RewriteRule para ler:

RewriteRule ^(.+)/(.+)\[(.+)\](.+)/(.+)$ /forums/$1/$2$3$4/$5 [R=301,L]
    
por 13.08.2018 / 17:32