В настоящее время я использую хостинг с сервером speedpeed . Хостинг говорит, что 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]
Но такой же результат.
Чтобы проверить, включен ли модуль mod_rewrite, создайте новый php-файл в корневой папке вашего WAMP-сервера. Введите следующее
phpinfo();
Получите доступ к созданному файлу из своего браузера.
Ctrl F, чтобы открыть поиск. Найдите 'mod_rewrite'. Если он включен, вы видите его как «Загруженные модули»,
Если нет, откройте httpd.conf (файл конфигурации Apache) и найдите следующую строку.
#LoadModule rewrite_module modules/mod_rewrite.so
Удалите знак фунта ('#') в начале и сохраните этот файл.
Перезагрузите сервер Apache.
Доступ к одному и тому же файлу php в вашем браузере.
Ищите 'mod_rewrite' снова. Теперь вы сможете найти его.
Если вы используете файл конфигурации виртуальных хостов, убедитесь, что у виртуального хоста есть директива AllowOverride All
где-то вроде этого:
<VirtualHost *:80> ... <Directory ...> AllowOverride All </Directory> </VirtualHost>
из командной строки, введите
sudo a2enmod переписать
если режим перезаписи уже включен, он скажет вам об этом!
Если apache_get_modules () не распознан или нет информации об этом модуле в phpinfo (); попробуйте протестировать mod rewrite, добавив эти строки в ваш файл .htaccess:
RewriteEngine On RewriteRule ^.*$ mod_rewrite.php
И mod_rewrite.php:
<?php echo "Mod_rewrite is activated!"; ?>
консоль:
<VirtualHost *:80> ... <Directory ...> AllowOverride All </Directory> </VirtualHost> sudo a2enmod rewrite sudo service apache2 restart
Если
in_array('mod_rewrite', apache_get_modules())
возвращает true
тогда mod-rewrite включен.
Если этот код находится в вашем файле .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 серверов. Я думаю, что можно с уверенностью сказать, что mod rewrite включен.
Переопределенная функция apache_get_modules()
PHP возвращает список включенных модулей. Чтобы проверить, включен ли mod_rewrite
, вы можете запустить следующий скрипт на своем сервере:
<?php print_r(apache_get_modules()); ?>
Если приведенный выше пример не удается, вы можете проверить mod-rewrite, используя файл .htaccess
.
Создайте файл htaccess
в корне документа и добавьте следующий rewriteRule:
RewriteEngine on RewriteRule ^helloWorld/?$ /index.php [NC,L]
Теперь посетите http://example.com/HelloWorld , вы будете внутренне перенаправлены на страницу /index.php вашего сайта. В противном случае, если mod-rewrite отключен, вы получите 500 ошибок сервера Internel.
Надеюсь это поможет.
Вы можете использовать функцию php
apache_get_modules
и проверьте наличие mod_rewrite
<pre> <?php print_r(apache_get_modules()); ?> </pre>
Если вы находитесь в системе 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
Это работает на CentOS:
$ sudo httpd -M |grep rewrite_module
Должен вывести rewrite_module (shared)
просто создайте новую страницу и добавьте этот код
<?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 и проверьте параметр перезаписи