.htaccess reescreve errado

3

Eu tenho uma estrutura da minha web http://example.com/category_name/product_name . Eu reescrevi-lo para o PHP usando o seguinte RewriteRule:

RewriteRule ^(.*)/(.*)/$ detail-produktu.php?kategorie=$1&nazev=$2

Mas o problema ocorre quando estou tentando reescrever o endereço http://example.com/user/david . Este URL sempre começa com /user , então eu quero reescrevê-lo assim:

RewriteRule ^user/(.*)/$      index.php?user=$1

Mas ainda assim o URL com /user vai para detail-produktu.php .

O que posso fazer?

    
por david n 22.03.2017 / 17:35

1 resposta

2

Você tem alguns problemas em potencial.

  1. O URL que você declarou ( http://example.com/user/david ) não termina com uma barra, mas o padrão RewriteRule inclui uma barra à direita, por isso não corresponderá.

  2. Você precisará incluir o sinalizador L para interromper o processo de reescrita (pelo menos a atual rodada de processamento em .htaccess ), caso contrário, a solicitação provavelmente também será capturada pela outra regra.

  3. A ordem é importante. As regras mais específicas precisam ser as primeiras. Assim, a regra para capturar a solicitação /user deve ser a primeira.

Por exemplo:

RewriteRule ^user/([^/]+)$ index.php?user=$1 [L]
RewriteRule ^([^/]+)/(.*)$ detail-produktu.php?kategorie=$1&nazev=$2 [L]

Eu removi a barra do padrão . Adicione isso de volta se a barra final for necessária. Eu também tornei o padrão um pouco mais restritivo, para que ele corresponda a segmentos de caminhos inteiros, em vez de qualquer coisa .

    
por 22.03.2017 / 18:01