it-roy-ru.com

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

В настоящее время я использую хостинг с lightspeed server. Хостинг говорит, что 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]

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

84
knightrider
  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" снова. Вы должны быть в состоянии найти это сейчас.

85
Fadzly Othman

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

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

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

57
KawaiKx

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

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

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

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

И mod_rewrite.php:

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

приставка: 

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

Sudo a2enmod rewrite
Sudo service Apache2 restart
12
BlocksByLukas

Если 

in_array('mod_rewrite', Apache_get_modules())

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

11
Shivanshu

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

8
Clive

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

apachectl -M
Apache2ctl -M

взяты из 2daygeek

8
Adi Prasetyo

Функция perdefined 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 вашего сайта. В противном случае, если mod-rewrite отключен, вы получите ошибку Internel Server 500. 

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

7
starkeen

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

$ Sudo httpd -M |grep rewrite_module

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

5
radtek

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

cd /etc/Apache2/mods-available

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

cd /etc/php/7.0/mods-available

набрать: ll -a

4
3p3ch3

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

      Apache_get_modules

и проверьте для mod_rewrite

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

http://in2.php.net/Apache_get_modules

4
Miqdad Ali

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

 <?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, касающееся включения модуля перезаписи в Apache wamp https://youtu.be/xIspOX9FuVU?t=1m43s Значок сервера Wamp -> Apache -> Модули Apache и проверьте параметр модуля перезаписи 

3
Hassan Saeed

Я знаю, что этот вопрос старый, но если вы можете отредактировать свой файл конфигурации 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>
1
Excellent Lawrence

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

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

Строка результата не может быть закомментирована, начиная с #

0
João Pimentel Ferreira

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

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

0
Kyle S

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

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