Ajuda com a regra mod_rewrite para url dinâmico
-
05-09-2019 - |
Pergunta
Ugh .. mod_rewrite me faz sentir estúpido. Eu simplesmente não ter embrulhado meu cérebro em torno dele ainda. : /
Eu tenho esta url:
http://example.com/a/name/
... que eu quero apontar aqui:
http://example.com/a/index.php?id=name
... onde name
é o que está sendo passado para index.php
como o argumento id
.
Qualquer coisa que eu tentei resultados em qualquer um 404 ou um 500 ..: (
Solução
Para começá-lo fora:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteRule ^/?a/([^/]+)/?$ /a/index.php?id=$1 [QSA,L]
Se um tutorial reescrita não funciona para você, tentar outra .
Edit: index.php
excluídos como por sugestão de Gumbo
Outras dicas
Se você quiser a barra final a ser opcional, você tem que excluir o arquivo que está reescrevendo a solicitação para. Caso contrário, você vai ter um bom recursão infinita.
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/a/index\.php$
RewriteRule ^/a/([^/]+)/?$ /a/index.php?id=$1 [L]
Aqui qualquer pedido que começa com /a/…
mas não /a/index.php
é reescrito para /a/index.php
.
Mas, se a barra no final é obrigatória, não há necessidade de excluir o arquivo de destino:
RewriteEngine on
RewriteRule ^/a/([^/]+)/$ /a/index.php?id=$1 [L]
Talvez algo ao longo das linhas
RewriteEngine on
RewriteBase /a/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?id=$1 [L,QSA]
faria o truque.
Eu sugiro que você dê uma olhada neste URL:
http://www.dracos.co.uk/code/ apache-reescrita de problemas /
As soluções apresentadas irá funcionar, mas há algumas ressalvas explicado no URL, principalmente em relação? e # nas URLs si mesmos.