![Невозможно загрузить модуль Apache mod_rewrite](https://rvso.com/image/697384/%D0%9D%D0%B5%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%B8%D1%82%D1%8C%20%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%20Apache%20mod_rewrite.png)
Я пытаюсь использовать mod_rewrite
модуль Apache24 server
, но не могу его загрузить. Я знаю, что было задано много вопросов по этой теме, и я рассмотрел все из них, но ничего не работает. Вот шаги, которые я выполнил до сих пор---
Файл CHANGED
httpd.conf
внес следующие изменения:
а. Не прокомментированLoadModule rewrite_module modules/mod_rewrite.so
б. ИзмененAllowOverride None
наAllowOverride All
Перезапустил сервер Apache.
Проверил загруженные модули с помощью команды командной строки
httpd -M
. Я вижу, что модуль mod_rewrite загружен. Прикрепляю изображение ниже.
Но после выполнения всех этих шагов я не вижу mod_rewrite как загруженный модуль в phpinfo
.
Как видно на картинке выше, загруженного модуля mod_rewrite нет. Также в качестве дикого хака я даже пробовал переписывать URL-адреса с помощью .htaccess
file, но это не работает. Apache, похоже, игнорирует .htaccess
file, хотя я поместил этот файл в свой корневой каталог.
Note: I am running `PHP` as an apache module
Using `WAMP` stack
Using `localhost` as server
Мне этот модуль очень нужен для переписывания URL. Можете ли вы предложить другой способ загрузки этого модуля?
РЕДАКТИРОВАТЬ
Я попытался переписать URL с виртуального хоста, так как ответ предполагает, что модуль загружен и не зависит ни от , .htaccess
ни от info.php
. Но все равно не перенаправляет. Я добавляю Virtual host
настройку ниже---
<VirtualHost *:80>
<Directory "/Apache24/htdocs">
Options FollowSymLinks
AllowOverride All
DirectoryIndex index.html index.php
</Directory>
ServerName localhost
DocumentRoot "/Apache24/htdocs"
ErrorLog "/Apache24/logs/error.log"
CustomLog "/Apache24/logs/access.log" combined
<directory "/Apache24/htdocs">
<IfModule rewrite_module>
Options +FollowSymlinks
RewriteEngine On
</IfModule>
<IfModule rewrite_module>
RewriteRule ^working.php fun.html
</IfModule>
</directory>
# Rewrite Rules #####################
RewriteEngine On
RewriteRule ^working.php fun.html
# end Rewrite Rules #################
</VirtualHost>
Приведенный выше код не перенаправляет его на , working.php
когда я пытаюсь запустить fun.html
. Он просто говорит:
Запрошенный URL /working.php не найден на этом сервере.
решение1
- Для работы mod_rewrite вам не нужны .htaccess или AllowOverride, не используйте их, поскольку вы являетесь администратором своего сервера, так как это только усложнит вам жизнь и приведет к ненужной нагрузке на ваш сервер.
Помимо загрузки модуля вам понадобится только следующая директива:
RewriteEngine включен
Дополнительный:
- Если вам нужно только это, рассмотрите возможность использования Redirect/RedirectMatch (из mod_alias) для простых перенаправлений.
- Подумайте о том, чтобы определить ваши перенаправления/перезаписи в контексте виртуального хоста, чтобы избежать будущих кошмаров и потери волос в ближайшем будущем.
решение2
Из ваших связанных скриншотов, ваш Server Root (путь файловой системы) кажется C:/Apache24
, но вы не делаете ссылку C:
ни в одной из директив конфигурации сервера? Вам нужно сослаться на полный путь файловой системы, например:
<Directory "C:/Apache24/htdocs">
RewriteRule ^working.php fun.html
Эта директива, используемая напрямую в VirtualHost (вне контейнера <Directory>
), никогда не будет соответствовать. При использовании в контексте VirtualHost (или конфигурации сервера) mod_rewrite соответствует полному пути URL, что, в частности,включаетпрефикс слеша. Это важное отличие от случая, когда mod_rewrite используется в .htaccess
контексте каталога/ (когда префикс слеша исключен).