Derrick Rose impressiona no primeiro jogo com o Cleveland Cavaliers

Eu tenho um arquivo .htaccess com regras como esta:

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} /apples/* RewriteRule . /page/faqs.php?cat=apples&question=%{REQUEST_URI} RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} /bananas/* RewriteRule . /page/faqs.php?cat=bananas&question=%{REQUEST_URI} 

Eu quero que funcione assim:

RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} /(apples|bananas)/* RewriteRule . /page/faqs.php?cat=$1&question=%{REQUEST_URI} 

com $ 1 sendo o valor correspondente (maçãs ou bananas). Como posso passar algo assim de uma condição para uma regra?

  • 1 Por que não estão testando maçãs | bananas em URI no estágio RewriteRule?
RewriteCond %{REQUEST_URI} /(apples|bananas)/* RewriteRule . /page/faqs.php?cat=$1&question=%{REQUEST_URI} 

Quase. Mas você precisa usar %1 ao invés de $1 como uma referência anterior ao primeiro grupo capturado na última correspondência CondPattern (RewriteCond padronizar). $1 é uma referência anterior ao primeiro grupo capturado no RewriteRule padronizar (mas você não tem nenhum, então $1 estaria sempre vazio neste exemplo).

No entanto, como @PatrickMevzek sugeriu nos comentários, você deve realizar esta verificação no URL no RewriteRule padronizar em vez disso (mais eficiente e menos uma diretiva). Neste caso, você usaria $1 como você está fazendo. Por exemplo:

RewriteRule ^(apples|bananas)/ /page/faqs.php?cat=$1&question=%{REQUEST_URI} [L] 

Você não tinha um âncora no seu original CondPattern (/(apples|bananas)/*) para que ele correspondesse a qualquer lugar dentro do URL. Presumi que isso deveria estar no início do caminho do URL. Também a trilha * não está fazendo o que você pensa que está. o * em regex, speak repete o caractere anterior 0 ou mais vezes (não é um caractere "curinga"). Então, isso teria servido apenas para combinar várias barras (o que eu duvido que seja a intenção)!

Eu também adicionei o L (last) flag. Eu suponho que você não deseja que nenhuma outra reescrita ocorra após esta? Isso realmente não importa se esta é a única diretiva mod_rewrite no arquivo, mas se você adicionou diretivas posteriores, o L pode ser necessário.

  • 1 Muito obrigado! Você tornou minha vida muito mais fácil hoje!

funcionou para você: Charles Robertson | Quer entrar em contato conosco?