Как проверить, включен ли mod_rewrite на сервере? - PullRequest
89 голосов
/ 07 сентября 2011

В настоящее время я использую хостинг с сервером lightspeed . Хостинг говорит, что mod_rewrite включен, но я не могу заставить мой скрипт работать там. Всякий раз, когда я пытаюсь получить доступ к URL-адресу, он возвращает 404 - страница не найдена .

Я разместил те же коды на другом сервере, который работает с Apache. Это работает там. Так что я думаю, это проблема .htaccess и mod_rewrite.

Но служба поддержки хостинга по-прежнему настаивает на том, что их mod_rewrite включен, поэтому я хотел бы знать, как я могу проверить, действительно ли он включен или нет.

Я пытался проверить с помощью phpinfo(), но не повезло, я не могу найти mod_rewrite там, потому что они используют lightspeed?

Есть ли способ проверить? Пожалуйста, помогите мне. Спасибо.

К вашему сведению: мой .htaccess код

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>

Я тоже так пытался

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]

Но тот же результат.

Ответы [ 17 ]

86 голосов
/ 05 июня 2012
  1. Чтобы проверить, включен ли модуль mod_rewrite, создайте новый файл php в корневой папке вашего сервера WAMP.Введите следующее

    phpinfo();

  2. Доступ к созданному вами файлу из браузера.

  3. Ctrl F , чтобы открыть поиск.Ищите «mod_rewrite».Если он включен, вы видите его как «Загруженные модули»

  4. Если нет, откройте httpd.conf (файл конфигурации Apache) и найдите следующую строку.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. Удалите знак фунта ('#') в начале и сохраните этот файл.

  6. Перезагрузите сервер apache.

  7. Получите доступ к тому же файлу php в вашем браузере.

  8. Найдите «mod_rewrite» еще раз.Вы должны быть в состоянии найти его сейчас.

71 голосов
/ 08 июня 2016

из командной строки, введите

перезапись sudo a2enmod

если режим перезаписи уже включен, он скажет вам об этом!

52 голосов
/ 13 сентября 2013

Если вы используете файл конфигурации виртуальных хостов, убедитесь, что соответствующий виртуальный хост имеет директиву AllowOverride All где-то вроде этого:

<VirtualHost *:80>
        ...
    <Directory "directory/of/your/.htaccess">
        AllowOverride All
    </Directory>
</VirtualHost>
15 голосов
/ 13 октября 2014

Если apache_get_modules () не распознан или нет информации об этом модуле в phpinfo ();попробуйте протестировать переписывание мод, добавив в файл .htaccess следующие строки:

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

и mod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>
12 голосов
/ 11 октября 2013

консоль:

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

sudo a2enmod rewrite
sudo service apache2 restart
11 голосов
/ 02 декабря 2013

Если

in_array('mod_rewrite', apache_get_modules())

возвращает true, затем перезапись мода включена.

9 голосов
/ 05 января 2018

вы можете сделать это на терминале, либо:

apachectl -M
apache2ctl -M

взято из 2daygeek

8 голосов
/ 25 февраля 2017

PHP perdefined apache_get_modules() возвращает список включенных модулей.Чтобы проверить, включен ли mod_rewrite, вы можете запустить на своем сервере следующий скрипт:

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

Если приведенный выше пример не удался, вы можете проверить перезапись мода, используя файл .htaccess.

Создайте файл htaccess в корне документа и добавьте следующее rewriteRule:

RewriteEngine on

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

Теперь посетите http://example.com/HelloWorld, Вы будете внутренне перенаправлены на /index.php страница вашего сайта.В противном случае, если mod-rewrite отключен, вы получите ошибку Internel Server 500.

Надеюсь, это поможет.

8 голосов
/ 07 сентября 2011

Если этот код находится в вашем файле .htaccess (без проверки для 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]

и вы можете зайти на любую страницу вашего сайта с ошибкой сервера 500. Я думаю, можно с уверенностью сказать, что перезапись мода включена.

5 голосов
/ 29 января 2017

Это работает на CentOS:

$ sudo httpd -M |grep rewrite_module

Должен вывести rewrite_module (shared)

...