.htaccess no Apache2 para urls php

1

Estou tentando mapear qualquer URL como localhost/first to localhost/first.php usando o mod_rewrite para o Apache no Ubuntu 15.04.

Aqui estão os passos.

  1. Apache2 instalado, PHP5 usando (apt-get apache2, php5) Habilitado PHP no Apache, portanto phpinfo() imprime informações adequadas.
  2. reescrita a2enmod, reinicie o apache
  3. Em /etc/apache2/sites-enabled/000-default.conf , adicionamos o seguinte no lugar adequado.

    <VirtualHost *:80>
        <Directory /var/www/html>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>
    </VirtualHost>
    -- Restart Apache
    
  4. .htaccess em /var/www/html ,

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    
  5. chmod 644 /var/www/html/.htaccess

  6. Reinicie o Apache

Mas uma solicitação como /localhost/second não se traduz para second.php .

  1. Editou .htaccess , alterou a última linha para RewriteRule ^second$ second.php . Ainda sem sucesso.

  2. No Apache error.log, vejo o erro:

    AH00687: Negotiation: discovered file(s) matching request: /var/www/html/second (None could be negotiated).

Alguém por favor pode ajudar?

    
por Ravi J 07.09.2016 / 13:05

1 resposta

3

Options Indexes FollowSymLinks MultiViews

A opção MultiViews provavelmente está causando esse problema. Isso deve ser removido. MultiViews (parte de mod_negotiation) tentará reescrever internamente uma solicitação para /file (onde existe /file<.ext> no sistema de arquivos) testando os vários arquivos encontrados naquele diretório e servirá o arquivo que corresponde ao mime- tipo. Isso acontece antes mod_rewrite tem um ir e pode resultar em um conflito (desde que você está tentando fazer uma coisa semelhante com mod_rewrite).

    
por 07.09.2016 / 13:26