Я устанавливаю Apache 2.4.35 на сервере FreebBSD 11.2-RELEASE-p5, я включил на нем модуль mod_rewrite, но ни одно из правил перезаписи не работает, и я потратил пару дней на поиск ответов, но не могу заставить его работать.
Вот что я получаю от запуска httpd -M на сервере:
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
mpm_prefork_module (shared)
authn_file_module (shared)
authn_core_module (shared)
authz_host_module (shared)
authz_groupfile_module (shared)
authz_user_module (shared)
authz_core_module (shared)
auth_basic_module (shared)
reqtimeout_module (shared)
filter_module (shared)
mime_module (shared)
log_config_module (shared)
env_module (shared)
headers_module (shared)
setenvif_module (shared)
version_module (shared)
unixd_module (shared)
status_module (shared)
autoindex_module (shared)
dir_module (shared)
alias_module (shared)
rewrite_module (shared)
php7_module (shared)
Это конфигурация Apache для моего виртуального хоста:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /usr/local/www/htdocs/myweb
ServerName myweb.mywebsite.com
<Location />
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|gz2|sit|rar)$ no-gzip dont-vary
</Location>
</VirtualHost>
###################################################################################
<Directory "/usr/local/www/htdocs/myweb">
Options All MultiViews
AllowOverride All
Require all granted
LogLevel debug rewrite:trace8
DirectoryIndex index.html index.php
</Directory>
И это первые строки файла .htaccess, расположенного в папке / usr / local / www / htdocs / myweb.
RewriteEngine on
RewriteBase /
#Login
RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^users/login(/?)$ /users/login.php [L]
Я перезапускал Apache миллионы раз, в журнале ошибок ничего не регистрируется, и каждое правило, которое я пытаюсь, всегда возвращает ошибку 404, и я не знаю, что еще делать, я не уверен, есть ли еще один модуль, который мне нужно включить, или что еще я нужно сделать.
Заранее большое спасибо!
ОБНОВИТЬ
По просьбе @KasperAgg вот дополнительная информация
Запрос:
POST http://myweb.mywebsite.com/users/login
Журнал ошибок:
[Sun Dec 16 14:29:40.349713 2018] [core:info] [pid 12094] [client 10.0.0.71:20255] AH00128: File does not exist: /usr/local/www/htdocs/myweb/users/login
Журнал доступа:
[16/Dec/2018:14:29:40 -0800] "POST /users/login HTTP/1.1" 404 209
/ usr / local / www / htdocs / myweb / users / папка:
-rw-r--r-- 1 www wheel 909 Dec 12 21:59 delete.php
-rw-r--r-- 1 www wheel 928 Dec 12 21:59 get.php
-rw-r--r-- 1 www wheel 892 Dec 12 21:59 getById.php
-rw-r--r-- 1 www wheel 1111 Dec 12 21:59 login.php
-rw-r--r-- 1 www wheel 742 Dec 12 21:59 logout.php
-rw-r--r-- 1 www wheel 2262 Dec 12 21:59 save.php
Что мне кажется странным, так это то, что сервер ведет себя так, как будто mod_rewrite не включен, и ищет папку пользователи / логин вместо того, чтобы переписывать URL-адрес в скрипт пользователи / login.php
Наряду с файлами .htaccess есть папки, содержащие сценарии PHP, это RESTful API, и mod_rewrite необходим для перезаписи дружественного URL-адреса в сценарий PHP, необходимый для обработки запроса.
Какой URL, например, не работает и работает ли он без перезаписи? Афайк, детектив Директории, должен быть частью виртуального хоста ...
Все переписывания терпят неудачу, ни один из них не работает, тот, который я перечислил, терпит неудачу, это то, о чем вы спрашиваете, или я неправильно понимаю ваш вопрос?
Я вижу одну перезапись (с условием), но если фактического «места назначения» не существует (index.php), вы, скорее всего, получите 404. Не могли бы вы показать пример URL-адреса, который вы пытаетесь, журнал 404 ( журнал ошибок / доступа apache) и фактическое содержимое каталога?
Только что обновил свой вопрос, чтобы добавить запрошенную информацию @KasperAgg
Вы пытались разместить директиву Directory внутри VirtualHost? У меня такое ощущение, что AllowOverride действительно не применяется ...
Просто сделал и никаких изменений, такое же поведение
/ usr / local / www / htdocs / csiapi не равно / usr / local / www / htdocs / myweb, может ли это быть?
Я не хотел раскрывать свои исходные имена папок и забыл изменить их там, моя беда, извините за это
Не беспокойтесь, просто отвлекающий маневр. И еще кое-что: не могли бы вы попробовать правило с косой чертой? Нравится ^/users/...
Просто изменил правило на RewriteRule ^ / users / login (/?) $ /Users/login.php [L], и оно снова ведет себя так же
Черт, у меня заканчиваются идеи ...
И последнее: не могли бы вы попробовать отключить mod_dir и посмотреть, что произойдет?
Только что сделал, и я получаю сообщение об ошибке из-за оператора DirectoryIndex в директиве Directory
Попробуйте закомментировать эту строку.
То же самое, все еще есть 404

Мне удалось исправить проблему, оказалось, что с директивой
RewriteEngine Off
В конце моего файла .htaccess нарушалась функция перезаписи, что странно, так это то, что эта конфигурация была скопирована с другого сервера, который был в основном клоном этого, и я никогда не испытывал никаких ошибок из-за этого, но теперь он работает и это может помочь другому человеку
Что содержит (...) / myweb?