Как проверить, включен ли 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 переписать

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


Это самый простой способ включить перезапись мода.
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.


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)


Это лучший способ сделать это в 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

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

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%/и она работает

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.