Como verificar se o mod_rewrite está habilitado no servidor?

104

Atualmente estou usando a hospedagem com servidor lightspeed . O host diz que mod_rewriteestá ativado, mas não consigo fazer meu script funcionar lá. Sempre que tento acessar a URL, ele retorna 404 - página não encontrada .

Coloquei os mesmos códigos em outro servidor que está rodando com Apache. Está funcionando ali. Então eu acho que é o problema .htaccesse mod_rewrite.

Mas o suporte de hospedagem ainda está insistindo comigo que seu mod_rewrite está ativado, então eu gostaria de saber como posso verificar se ele está realmente ativado ou não.

Tentei verificar com phpinfo(), mas sem sorte, não encontro mod_rewrite, é porque estão usando lightspeed?

Existe alguma maneira de verificar? Por favor, me ajude. Obrigado.

Para sua informação: meu .htaccesscódigo é

Options -Indexes

<IfModule mod_rewrite.c>
DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</IfModule>

Eu tentei assim também

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

Mas mesmo resultado.

Cavaleiro
fonte

Respostas:

99

na linha de comando, digite

sudo a2enmod reescrever

se o modo de reescrita já estiver habilitado, você será informado!

KawaiKx
fonte
Esta é a maneira mais fácil de habilitar a reescrita de mod.
Andrômeda
3
SIM ! Perfeito, simplesmente perfeito.
George Dimitriadis
Trabalhou. Simples e fácil. Obrigado
derrota biplab de
97
  1. Para verificar se o módulo mod_rewrite está habilitado, crie um novo arquivo php na pasta raiz do seu servidor WAMP. Digite o seguinte

    phpinfo();

  2. Acesse o arquivo criado a partir do seu navegador.

  3. CtrlFpara abrir uma pesquisa. Procure por 'mod_rewrite'. Se estiver habilitado, você o verá como 'Módulos carregados'

  4. Caso contrário, abra httpd.conf (arquivo Apache Config) e procure a seguinte linha.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. Remova o sinal de libra ('#') no início e salve este arquivo.

  6. Reinicie seu servidor apache.

  7. Acesse o mesmo arquivo php em seu navegador.

  8. Procure por 'mod_rewrite' novamente. Você deve ser capaz de encontrá-lo agora.

Fadzly Othman
fonte
9
Acredito que phpinfo () relata os módulos carregados do Apache quando o próprio PHP está sendo executado como um módulo do Apache. O OP afirma que o PHP está rodando em Lightspeed, que tem seu próprio mecanismo de reescrita compatível com mod_rewrite.
Mr White
2
Para a primeira etapa eu tive que inserir: <? Php echo phpinfo (); ?>
Greg Noe
7
Observe que este método não funcionará se você estiver executando o PHP como um aplicativo CGI (que é o caso se phpinfo()o campo “API do servidor” mostrar “CGI / FastCGI”). phpinfo()não listará os módulos habilitados. Nesse caso, consulte Como verificar o mod_rewrite no PHP CGI .
Rory O'Kane
67

Se você estiver usando um arquivo de configuração de hosts virtuais, certifique-se de que o host virtual em questão tenha a diretiva em AllowOverride Allalgum lugar como este:

<VirtualHost *:80>
        ...
    <Directory "directory/of/your/.htaccess">
        AllowOverride All
    </Directory>
</VirtualHost>

Basicamente, isso permite o processamento de todas as diretivas .htaccess.

Jahmic
fonte
3
Obrigado. Devo a você uma Budweiser. <3
Nishant Ghodke
o que significa ...em <Directory ...>? O que devo colocar lá? o diretório onde está .htaccess?
João Pimentel Ferreira
sim mesmo, o ... deve citar entre aspas "..." o diretório onde está .htaccess
João Pimentel Ferreira
Ele tinha. Copiei o arquivo conf do servidor e, embora tenha mudado o ServerName, não mudei o nome do diretório, depois disso e reiniciei o apache tudo bem.
D. Dan
1
RichardSe essa resposta funcionou para você e resolveu seu problema, você deve marcá-la como correta e conceder a @Jahmic o valor devido.
Sinthia V
18

Se apache_get_modules () não for reconhecido ou nenhuma informação sobre este módulo em phpinfo (); tente testar a reescrita do mod adicionando essas linhas em seu arquivo .htaccess:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

E mod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>
wappy
fonte
15

console:

<VirtualHost *:80>
        ...
    <Directory ...>
        AllowOverride All
    </Directory>
</VirtualHost>

sudo a2enmod rewrite
sudo service apache2 restart
Lukas Lukac
fonte
Já tentei muito resolver isso e, quando tento, funciona para mim. Eu tenho o último apache e ubuntu agora.
Fernando Sanchiz
15

E se

in_array('mod_rewrite', apache_get_modules())

retorna, em trueseguida, mod-rewrite é habilitado.

Shivanshu
fonte
Solução perfeita de uma linha para verificar o módulo de reescrita habilitado ou não via códigos PHP.
Shakeel Ahmed
12

A apache_get_modules()função definida do PHP retorna uma lista de módulos habilitados. Para verificar se mod_rewriteestá ativado, você pode executar o seguinte script em seu servidor:

<?php
print_r(apache_get_modules());
?>

Se o exemplo acima falhar, você pode verificar mod-rewrite usando seu .htaccessarquivo.

Crie um htaccessarquivo na raiz do documento e adicione a seguinte rewriteRule:

RewriteEngine on

RewriteRule ^helloWorld/?$ /index.php [NC,L]

Agora visite http://example.com/HelloWorld , Você será encaminhado internamente para a página /index.php do seu site. Caso contrário, se mod-rewrite estiver desabilitado, você receberá um erro de servidor 500 Internel.

Espero que isto ajude.

Amit Verma
fonte
eu uso 7.2, apache_get_modules ficou indefinido. Devo reiniciar o apache2 após a edição .htaccess?
Adi Prasetyo
1
Não, você não precisa reiniciar o servidor ao usar o htaccess.
Amit Verma
12

você pode fazer isso no terminal:

apachectl -M
apache2ctl -M

tirado de 2daygeek

Adi Prasetyo
fonte
No Debian 9, funciona, mas você deve estar logado como root ou usarsudo
androsfat
11

Isso funciona no CentOS:

$ sudo httpd -M |grep rewrite_module

Deve produzir rewrite_module (shared)

Radtek
fonte
Esta é a melhor maneira de fazer isso no CentOS, supondo que você tenha acesso ssh. Obrigado, @radtek!
John T.
10

Se este código estiver em seu arquivo .htaccess (sem a verificação de mod_rewrite.c)

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

e você pode visitar qualquer página em seu site obtendo um erro de servidor 500. Acho que é seguro dizer que mod rewrite está ativado.

Clive
fonte
3
Então você pode acessar algumas páginas do site sem um erro 500? Isso geralmente significa que se o arquivo .htaccess estiver sendo lido, o mod_rewrite deve ser ativado. No entanto, o .htaccess pode não estar sendo lido ... tente escrever alguns caracteres sem sentido no topo do seu arquivo .htaccess, isso fará com que a conexão seja interrompida com um erro de servidor 500 se o Apache estiver realmente lendo o arquivo. Se estiver sendo lido, você poderia dar um exemplo de URL que acha que deveria funcionar, mas não funciona?
Clive
o problema é que não é um servidor apache, é a velocidade da luz. Nunca recebo o erro 500, tudo o que recebo é o erro 404. É por isso que estou duvidando que .htaccess não esteja habilitado.
knightrider
Provavelmente sim, eu tentaria colocar os caracteres sem sentido em .htaccess e ver se você obtém o erro 500 ao ir diretamente para uma página não reescrita (por exemplo, index.php). Caso contrário, pode valer a pena postar uma nova pergunta perguntando como habilitar .htaccess com Lightspeed
Clive
5

Você pode usar a função php

      apache_get_modules

e verifique se há mod_rewrite

<pre>
<?php
print_r(apache_get_modules());
?>
</pre>

http://in2.php.net/apache_get_modules

Miqdad Ali
fonte
2
apache_get_modules () só funcionará se o PHP estiver rodando como um módulo Apache. O OP afirma que o PHP está sendo executado no Lightspeed.
MrWhite
5

Se você estiver no sistema Linux, você pode verificar todos os módulos de ativação para apache2 (no meu caso) na seguinte pasta: / etc / apache2 / mods-available

cd /etc/apache2/mods-available

para digitar: ll -a
se você deseja verificar os módulos disponíveis para a pasta php (neste caso, php 7) /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

digitar: ll -a

Ezequiel De Simone
fonte
4

basta fazer uma nova página e adicionar este código

 <?php
 if(!function_exists('apache_get_modules') ){ phpinfo(); exit; }
 $res = 'Module Unavailable';
 if(in_array('mod_rewrite',apache_get_modules())) 
 $res = 'Module Available';
?>
<html>
<head>
<title>A mod_rewrite availability check !</title></head>
<body>
<p><?php echo apache_get_version(),"</p><p>mod_rewrite $res"; ?></p>
</body>
</html>

e execute esta página, em seguida, encontre será capaz de saber o módulo está disponível ou não se não, então você pode perguntar para sua hospedagem ou se deseja habilitá-lo na máquina local, então verifique este tutorial passo a passo do youtube relacionado a habilitar módulo de reescrita no wamp apache https://youtu.be/xIspOX9FuVU?t=1m43s Ícone do servidor Wamp -> Apache -> Módulos Apache e verifique a opção de módulo de reescrita

Hassan Saeed
fonte
2

Eu sei que esta questão é antiga, mas se você pode editar o arquivo de configuração do Apache para AllowOverride AllpartirAllowOverride None

<Directory "${SRVROOT}/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>
Excelente Lawrence
fonte
É uma boa ideia informar o nome exato e, quando possível, a localização do arquivo que precisa ser alterado. Será útil para os recém-chegados. Obrigado
MindRoasterMir
Também deve-se ter em mente que as alterações só entram em vigor após você ter reafirmado seu apache. obrigado
MindRoasterMir
1

Você só precisa verificar se o arquivo está lá, digitando

cat /etc/apache2/mods-available/rewrite.load

A linha de resultado não pode ser comentada começando com #

João Pimentel Ferreira
fonte
1

Este código funcionou para mim:

if (strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false) echo "mod_rewrite enabled";
else echo "mod_rewrite disabled";
Keinan Goichman
fonte
0

Eu estava tendo o problema exato, resolvi clicando na estrutura personalizada, adicionando /index.php/%postname%/e funcionou

Espero que isso evite o estresse que passei por descobrir o que diabos havia de errado com isso.

Kyle S
fonte