Як перевірити, чи ввімкнено mod_rewrite на сервері?


104

В даний час я використовую хостинг із сервером lightpeed . Хостинг каже mod_rewrite, що ввімкнено, але я не можу заставити свій сценарій працювати там. Кожен раз, коли я намагаюся отримати доступ до URL, він повертає сторінку 404 - не знайдено .

Я ставлю ті самі коди на інший сервер, який працює з Apache. Це працює там. Так що я здогадуюсь, це .htaccessі mod_rewriteпитання.

Але хостингова підтримка все ще наполягає на тому, що їх mod_rewrite увімкнено, тому я хотів би знати, як я можу перевірити, чи він насправді включений чи ні.

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

Чи є спосіб перевірити? Будь ласка, допоможіть мені. Дякую.

FYI: мій .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]

Але такий же результат.

Відповіді:


98

з командного рядка введіть

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

якщо режим перезапису вже включений, він вам скаже!


Це найпростіший спосіб увімкнути перезапис мод.
andromeda

3
ТАК ! Ідеально, просто ідеально.
Джордж Димитріадіс

Працювали. Просто і легко. Дякую
біплаб розгромився

96
  1. Щоб перевірити, чи включений модуль mod_rewrite, створіть новий файл php у кореневій папці вашого WAMP-сервера. Введіть наступні

    phpinfo();

  2. Доступ до створеного файлу зі свого браузера.

  3. CtrlFщоб відкрити пошук. Шукати 'mod_rewrite'. Якщо це ввімкнено, ви бачите це як "Завантажені модулі"

  4. Якщо ні, відкрийте httpd.conf (файл Apache Config) і шукайте наступний рядок.

    #LoadModule rewrite_module modules/mod_rewrite.so

  5. Видаліть знак початку фунта ("#") на початку та збережіть цей файл.

  6. Перезавантажте сервер apache.

  7. Доступ до того ж PHP-файлу у вашому браузері.

  8. Знову шукайте 'mod_rewrite'. Ви повинні мати можливість це зараз знайти.


9
Я вважаю, що phpinfo () повідомляє про завантажені модулями Apache, коли PHP сам запускається як модуль Apache. ОП заявляє, що PHP працює на Lightspeed, який має власну сумісну модуль перезапису mod_rewrite.
MrWhite

2
Для першого кроку мені довелося ввести: <? Php echo phpinfo (); ?>
Грег Ное

7
Зауважте, що цей метод не буде працювати, якщо ви використовуєте PHP як додаток CGI (у тому випадку, якщо phpinfo()в полі "Сервер API" відображається "CGI / FastCGI"). phpinfo()не відображатиме список включених модулів. У цьому випадку див. Як перевірити наявність mod_rewrite на PHP CGI .
Rory O'Kane

67

Якщо ви використовуєте файл конфігурації віртуальних хостів, переконайтеся, що відповідний віртуальний хост має директиву AllowOverride Allдесь так:

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

В основному, це дозволяє дозволити обробку всіх директив .htaccess.


3
Дякую. Я завдячую вам Budweiser. <3
Нішант Годке

що це означає ...в <Directory ...>? Що я туди покладу? де знаходиться .htaccess?
Жоао Піментел Феррейра

так справді, ... слід згадати між цитатами "..." каталог, де .htaccess
Жоао Піментел Феррейра

Це було. У мене було скопійовано файл конфіденції з сервера, і, хоча я змінив ServerName, я не змінив ім'я каталогів, після цього і перезапуску апаша все було нормально.
Д. Дан

1
Річард Якщо ця відповідь спрацювала для вас і вирішила вашу проблему, ви повинні позначити її як правильну та нагородити @Jahmic належним.
Сінтія 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

Я багато намагався вирішити це, і тоді, коли спробую це, це працює для мене. У мене зараз останні апачі та ubuntu.
Фернандо Санчіз

15

Якщо

in_array('mod_rewrite', apache_get_modules())

повертається, trueтоді ввімкнено перезапис модулів.


Ідеальне рішення в одному рядку, щоб перевірити модуль перезапису, включений чи ні через PHP-коди.
Shakeel Ahmed

12

Повторно визначена apache_get_modules()функція PHP повертає список включених модулів. Щоб перевірити, чи mod_rewriteввімкнено, ви можете запустити наступний скрипт на своєму сервері:

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

Якщо вищевказаний приклад не вдається, ви можете перевірити мод-переписати за допомогою свого .htaccessфайлу.

Створіть htaccessфайл у корені документа та додайте наступне перезапис:

RewriteEngine on

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

Тепер відвідайте http://example.com/HelloWorld , вас буде внутрішньо переслано на /index.php сторінку вашого сайту. В іншому випадку, якщо модуль перезапису буде відключено, ви отримаєте помилку на сервері 500 Internel.

Сподіваюся, це допомагає.


Я використовую 7.2, apache_get_modules не визначено. Чи потрібно перезапускати apache2 після редагування .htaccess?
Аді Прасетьо

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!
Джон Т.

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 не вмикається.
лицар

Швидше за все, так, я б спробував ввести нерозумні символи в .htaccess і побачити, чи з’являється ви помилка 500 при переході безпосередньо на непереписану сторінку (наприклад, index.php). Якщо ні, то, можливо, варто поставити нове запитання із запитом, як увімкнути .htaccess за допомогою Lightspeed
Clive

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. В ОП зазначається, що 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>

і запустіть цю сторінку, тоді ви знайдете, чи зможете дізнатись модуль Доступний чи ні, якщо ні, тоді ви можете звернутися до свого хостингу або якщо ви хочете включити його на локальній машині, тоді перевірте цей ютуб покроковий посібник, пов’язаний з тим, щоб увімкнути перезапис модуля у 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

Також слід пам’ятати, що зміни набувають чинності лише після перезавантаження апашу. спасибі
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%/і вона працює

Сподіваюсь, це позбавить когось від стресу, який я пережив, виявивши, що чорт тут не так.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.