Как проверить, включен ли mod_rewrite на сервере?

104

На данный момент я использую хостинг с сервером 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]

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

всадник
источник

Ответы:

99

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

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

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

KawaiKx
источник
Это самый простой способ включить перезапись мода.
andromeda
3
ДА ! Идеально, просто идеально.
Джордж Димитриадис
Работал. Просто и легко. Спасибо
biplab rout
97
  1. Чтобы проверить, включен ли модуль mod_rewrite, создайте новый файл php в корневой папке вашего WAMP-сервера. Введите следующее

    phpinfo();

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

  3. CtrlF, чтобы открыть поиск. Найдите "mod_rewrite". Если он включен, вы видите его как «Загруженные модули».

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

    #LoadModule rewrite_module modules/mod_rewrite.so

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

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

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

  8. Снова найдите "mod_rewrite". Вы должны найти его сейчас.

Фадзлы Осман
источник
9
Я считаю, что phpinfo () сообщает о загруженных модулях Apache, когда PHP сам запускается как модуль Apache. OP заявляет, что PHP работает на Lightspeed, у которого есть собственный механизм перезаписи, совместимый с mod_rewrite.
MrWhite
2
Для первого шага мне нужно было ввести: <? Php echo phpinfo (); ?>
Грег Ной
7
Обратите внимание, что этот метод не будет работать, если вы используете PHP как приложение CGI (что имеет место, если в phpinfo()поле «Server API» отображается «CGI / FastCGI»). phpinfo()не будет перечислять включенные модули. В этом случае см. Как проверить mod_rewrite на PHP CGI .
Рори О'Кейн
67

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

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

По сути, это означает, что разрешена обработка всех директив .htaccess.

Jahmic
источник
3
Спасибо. Я должен тебе Будвайзер. <3
Nishant Ghodke 02
что это значит ...в <Directory ...>? Что мне туда положить? каталог, в котором находится .htaccess?
Жуан Пиментел Феррейра
да, действительно, ... следует указать между кавычками "..." каталог, в котором находится .htaccess
Жоао Пиментел Феррейра
Было. У меня был файл conf, скопированный с сервера, и хотя я изменил его ServerName, я не изменил имя каталога, после этого и перезапуска apache все было в порядке.
D. Dan
1
Ричард: Если этот ответ сработал для вас и решил вашу проблему, вы должны отметить его как правильный и присудить @Jahmic должное.
Sinthia V
18

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

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

И mod_rewrite.php:

<?php echo "Mod_rewrite is activated!"; ?>
шаткий
источник
15

приставка:

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

sudo a2enmod rewrite
sudo service apache2 restart
Лукас Лукач
источник
Я много пытался решить эту проблему, но когда попробовал, это сработало для меня. У меня сейчас последний апач и убунту.
Фернандо Санчис
15

Если

in_array('mod_rewrite', apache_get_modules())

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

Шиваншу
источник
Идеальное однострочное решение для проверки включения или отключения модуля перезаписи через коды PHP.
Шакил Ахмед
12

Предопределенная apache_get_modules()функция PHP возвращает список включенных модулей. Чтобы проверить, 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 вашего сайта. В противном случае, если мод-перезапись отключена, вы получите ошибку сервера 500 Internel.

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

Амит Верма
источник
Я использую 7.2, apache_get_modules не определено. Нужно ли перезапускать apache2 после редактирования .htaccess?
Adi Prasetyo 05
1
Нет, вам не нужно перезапускать сервер при использовании htaccess.
Амит Верма
12

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

apachectl -M
apache2ctl -M

взято из 2daygeek

Ади Прасетьо
источник
В Debian 9 это работает, но вы должны войти в систему как root или использоватьsudo
androsfat
11

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

$ sudo httpd -M |grep rewrite_module

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

Radtek
источник
Это лучший способ сделать это в CentOS, если у вас есть доступ по ssh. Спасибо, @radtek!
John T.
10

Если этот код находится в вашем файле .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. Я думаю, можно с уверенностью сказать, что перезапись мода включена.

Клайв
источник
3
Значит, вы можете получить доступ к некоторым страницам сайта без ошибки 500? Обычно это означает, что при чтении файла .htaccess необходимо включить mod_rewrite. Однако .htaccess может не читаться ... попробуйте написать несколько бессмысленных символов в верхней части файла .htaccess, это приведет к тому, что соединение прекратится с ошибкой сервера 500, если Apache действительно читает файл. Если он читается, не могли бы вы привести пример URL-адреса, который, по вашему мнению, должен работать, но не работает?
Клайв,
проблема в том, что это не сервер apache, а скорость света. Я никогда не получаю ошибку 500, все, что я получаю, это ошибка 404. Вот почему я сомневаюсь, что .htaccess не включен.
Knightrider 07
Скорее всего, да, я бы попробовал поместить бессмысленные символы в .htaccess и посмотреть, получите ли вы ошибку 500 при переходе непосредственно на неперезаписанную страницу (например, index.php). Если нет, возможно, стоит опубликовать новый вопрос с вопросом, как включить .htaccess с помощью Lightspeed
Клайв
5

Вы можете использовать функцию php

      apache_get_modules

и проверьте mod_rewrite

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

http://in2.php.net/apache_get_modules

Микдад Али
источник
2
apache_get_modules () будет работать, только если PHP работает как модуль Apache. OP заявляет, что PHP работает на Lightspeed.
MrWhite
5

Если вы находитесь в системе Linux, вы можете проверить все модули включения для apache2 (в моем случае) в следующей папке: / etc / apache2 / mods-available

cd /etc/apache2/mods-available

набрать: ll -a
если вы хотите проверить доступные модули для php (в данном случае php 7), папка /etc/php/7.0/mods-available

cd /etc/php/7.0/mods-available

печатать: ll -a

Эсекьель Де Симоне
источник
4

просто создайте новую страницу и добавьте этот код

 <?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>

и запустите эту страницу, затем найдите, чтобы узнать, доступен ли модуль или нет, если нет, вы можете запросить свой хостинг, или если вы хотите включить его на локальном компьютере, затем проверьте это пошаговое руководство на YouTube, связанное с включением модуля перезаписи в wamp apache https://youtu.be/xIspOX9FuVU?t=1m43s Значок сервера Wamp -> Apache -> Модули Apache и проверьте параметр перезаписи модуля

Хасан Саид
источник
2

Я знаю, что этот вопрос старый, но если вы можете отредактировать файл конфигурации Apache AllowOverride AllсAllowOverride 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>
Отличный Лоуренс
источник
Рекомендуется указать точное имя и, по возможности, расположение файла, который необходимо изменить. Будет полезно новичкам. Спасибо
MindRoasterMir
Также следует иметь в виду, что изменения вступят в силу только после того, как вы обновите свой apache. спасибо
MindRoasterMir
1

Вам просто нужно проверить, есть ли файл, набрав

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

Комментировать строку результата нельзя, начиная с #

Жоао Пиментел Феррейра
источник
1

Этот код работал у меня:

if (strpos(shell_exec('/usr/local/apache/bin/apachectl -l'), 'mod_rewrite') !== false) echo "mod_rewrite enabled";
else echo "mod_rewrite disabled";
Кейнан Гойчман
источник
0

У меня была точная проблема, я решил ее, щелкнув настраиваемую структуру, затем добавив, /index.php/%postname%/и она работает

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

Кайл С
источник