Mod_rewrite para eliminar as cadeias de consulta

1

Eu tenho trabalhado nisso por um tempo, mas não estou achando exatamente o que estou procurando. Estou escrevendo um aplicativo da Web para permitir que meus usuários criem e publiquem partes do conteúdo HTML em uma estrutura de pasta de domínio e URL de sua escolha. Todo o conteúdo e as estruturas de URLs solicitadas são armazenados em um banco de dados. Eu tenho todo o código no meu index.php (na pasta raiz) para acessar o conteúdo do banco de dados, e com base no nome do servidor (e esperamos que a estrutura da pasta) irá escolher o conteúdo adequado do banco de dados e exibi-lo ao final navegador de usuários. Então minha situação é assim:

www.test.com/index.php?id=123234345

... exibirá a página correta, mas quero que meus usuários possam definir um "nome de página" exclusivo em vez de usar o índice numérico (também quero ocultar a parte /index.php), de modo que gostaria que o usuário final visse:

www.test.com/arbitrary-unique-keyword/keyword2/keyword3

, que invocará a página index.php na pasta raiz. Então eu vou usar a variável PHP $ _SERVER ['PATH_INFO'] para combinar a estrutura de pastas solicitadas com o conteúdo apropriado em meu banco de dados e exibir isso. Todo o material que encontrei até agora me espera codificar partes da estrutura de pastas nas regras ... mas acho que quero algo mais simples (talvez).

Então, a questão em poucas palavras:

Como eu uso mod_rewrite para permitir que todos os caminhos de pastas "inexistentes" sejam passados para um index.php principal que resida na pasta raiz? (Para todos os caminhos que existem, como para chamadas para imagens ... eu quero que eles tenham sucesso e não sejam direcionados para o index.php obviamente)

Obrigado a todos, por favor, deixe-me saber se posso esclarecer alguma coisa.

    
por Jeff Atwood 21.04.2010 / 22:55

1 resposta

1

Você pode conseguir isso com RewriteCond usando a condição -f , que testa a existência do arquivo, por exemplo:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1

No entanto, a situação pode ser mais complexa se houver várias condições de reescrita ou Alias / ScriptAlias diretivas. Nesse caso, o servidor pode não conseguir fornecer REQUEST_FILENAME . Uma abordagem mais segura, mas que pode ser errada para configurações complexas, é usar diretamente DOCUMENT_ROOT , ou seja,

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
RewriteRule ^(.*)$ /index.php/$1
    
por 21.04.2010 / 23:16