Configuração do host virtual e mod_rewrite - Removendo a extensão do PHP e adicionando a barra

1

No meu servidor de produção, as coisas estão bem: a remoção da extensão do PHP e as regras de barra à direita estão em vigor no meu arquivo .htaccess .

Mas, localmente, isso não está funcionando (bem, parcialmente, de qualquer forma). Estou executando o Apache2 com um host virtual para o site em questão. Eu decidi não usar o arquivo .htaccess neste caso e apenas adicionar as regras ao arquivo httpd-vhosts.conf , o que, eu ouvi, se possível no seu servidor, é o melhor caminho a ser seguido.

O host virtual está funcionando e a URL que eu uso para o meu site é assim:

devserver:9090

Aqui está o meu arquivo httpd-vhosts.conf :

NameVirtualHost *:9090

# for stuff other than this site
<VirtualHost *:9090>
    ServerAdmin admin@localhost
    DocumentRoot "/opt/lampstack/apache2/htdocs"
    ServerName localhost
</VirtualHost>

# for site in question
<VirtualHost *:9090>
    ServerAdmin admin@localhost
    DocumentRoot "/opt/lampstack/apache2/htdocs/devserver"
    ServerName devserver

    <Directory "/opt/lampstack/apache2/htdocs/devserver">
        Options Indexes FollowSymLinks Includes
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

    <IfModule rewrite_module>
        RewriteEngine ON    

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

    </IfModule>

    # error docs
    ErrorDocument 404 /errors/404.php

</VirtualHost>

O problema que estou enfrentando é que quando eu vou para diretórios no site, recebo um erro 404. Então, por exemplo, isso:

devserver:9090/page.php

vai para

devserver:9090/page/

mas indo para um diretório (que tem um index.php ):

devserver:9090/dir/

gera uma página de erro 404.

Se eu digitar devserver:9090/dir/index.php , recebo devserver:9090/dir/index/ e o conteúdo que eu quero aparecer ...

Alguém pode me ajudar com minhas regras de reescrita?

OBSERVAÇÃO

Veja minha resposta abaixo

50 pontos para qualquer um que possa esclarecer essa resposta. Eu comecei uma recompensa e depois encontrei a minha resposta, mas ainda estou aprendendo, então qualquer boa dica pode valer +50.

    
por nicorellius 07.11.2013 / 21:12

2 respostas

0

Eu mudei isso:

Options Indexes FollowSymLinks Includes

para isso:

Options Indexes FollowSymLinks MultiViews

e agora funciona como esperado ... Aqui está a regra que eu escolhi para remover a extensão do PHP:

<Directory "/opt/lampstack/apache2/htdocs/devserver">
    Options Indexes FollowSymLinks Includes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<IfModule rewrite_module>
    RewriteEngine ON    

    # remove PHP extension
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule (.*)/$ /$1.php

    # add trailing slash to all URLs
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*)$ http://www.example.com/$1/ [R=302,L]

</IfModule>
    
por 10.01.2014 / 21:24
2

Talvez alguém receba uma resposta mais detalhada para esse caso específico, mas, como um conselho mais geral, você pode usar as diretivas RewriteLog e RewriteLogLevel para obter informações detalhadas sobre qual regra é processada e qual é o resultado de a reescrita.

Com essa informação, você poderá encontrar a regra que está faltando ou, pelo menos, nos enviar a saída do registro para ter mais detalhes.

link

    
por 07.11.2013 / 23:21