Embora eu seja novo no htaccess, tenho aprendido muito nos últimos dias, mas estou preso em uma determinada parte que fez com que o site não se comportasse conforme desejado. Aqui está a parte do código onde tenho meu delima:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME}.php -f
Rewriterule ^ %{REQUEST_FILENAME}.php [NC]
# RewriteCond /templates/%{REQUEST_FILENAME}.html -f
RewriteRule ^([^/\.]+)$ index.php?$1 [NC,S=1]
RewriteRule ^([a-zA-Z0-9]+)$ product.php?product_id=$1 [NC]
O primeiro RewriteCond e RewriteRule funcionam perfeitamente. Meu problema com o que acontece depois.
O que preciso conseguir é que quando um usuário insere/alguma palavraele procuraria se um arquivo com o mesmo nome é válido no/modelospasta e, portanto, serviria comoindex.php?alguma palavra, caso contrário, seria servido comoproduct.php?product_id=alguma palavra. O oindex.phpregra funciona bem quando a segunda condição é comentada, mas quando adicionada apenas aproduto.phpregra funciona.
A "etiqueta" fornecida pode ser composta por números, letras, palavras hifenizadas (ou seja, quaisquer palavras) ou uma combinação de números e letras. As regras não devem diferenciar maiúsculas de minúsculas.
Agradeço qualquer ajuda sobre o assunto.
Responder1
O problema é que %{REQUEST_FILENAME}
éabsolutocaminho traduzido da URL, ou seja, parahttp://example.com/foobarpode ser algo parecido /var/www/vhost/example.com/httpdocs/foobar
(dependendo de como o seu servidor web está configurado). Sugiro que você use a correspondência de padrões no URL como em
RewriteCond %{DOCUMENT_ROOT}/templates/$1.html -f
RewriteRule ^([^\/\.]+)$ index.php?$1 [NC,S=1]
(eu não testei isso)