У меня есть следующая конфигурация моего файла apache2.conf
:
DocumentRoot /var/www/html
<Directory / >
# Options FollowSymLinks
AllowOverride None
Require all granted
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>
Я считаю, что это в значительной степени шаблон для сайтов wordpress. Если я использую curl , чтобы запросить /index.php
, он работает нормально, но если я запрашиваю root http: // localhost /
, он ничего не возвращает в тело и заголовок выглядят следующим образом:
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Date: Sun, 30 Jun 2019 18:31:38 GMT
< Server: Apache/2.4.18 (Ubuntu)
< Location: http://ken.net/
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
<
* Connection #0 to host localhost left intact
Я немного новичок в конфигах Apache , но я не вижу в нем ничего необычного. Это в значительной степени шаблонный ... и, хотите верьте, хотите нет, раньше он работал (несколько месяцев назад, но слишком долго оставил этот проект на полке).
Добавление полного apache2.conf
:
Mutex file:${APACHE_LOCK_DIR} default
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
DocumentRoot /var/www/html
<Directory / >
# Options FollowSymLinks
AllowOverride None
Require all granted
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
Каталог с включенными модами
выглядит так:
access_compat.load authn_file.load autoindex.load env.load mpm_prefork.load rewrite.load
alias.conf authz_core.load deflate.conf filter.load negotiation.conf setenvif.conf
alias.load authz_host.load deflate.load mime.conf negotiation.load setenvif.load
auth_basic.load authz_user.load dir.conf mime.load php7.0.conf status.conf
authn_core.load autoindex.conf dir.load mpm_prefork.conf php7.0.load status.load
Теперь, когда я знаю о сайтах ./ -enabled / *. conf
в основной конфигурации Я удалил инструкции
из основной конфигурации и из конфигурации сайта по умолчанию (также известной как / etc /apache2/sites-enabled/000-default.conf
) Я изменил его на:
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@site.com
DocumentRoot /var/www/html
<Directory / >
# Options FollowSymLinks
AllowOverride None
Require all granted
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>>
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
Wordpress и тому подобное, как будто наивно предполагают, что только один домен указывает на него. (А также тот же протокол на вашем обратном прокси-сервере и бэкэнде. У вас была бы такая же проблема, если бы ваш apache использовал https, а wordpress был обратным прокси-сервером для какой-то другой вещи (другой хост, тот же хост, другая служба)).
Так что, если вы не можете настроить wordpress так, чтобы он не перенаправлял вас (возможно, плагин или исправление php), вам просто нужно убедиться, что URL, который вы установили в wordpress, совпадает с тем, который пользователь использует для перехода на ваш сайт.
Если вы хотите сделать что-то другое в тестовой среде, я рекомендую использовать исходные рабочие URL (в вашем случае http://ken.net , а не http: // localhost ), но изменив их IP-адреса на вашу тестовую среду в вашем файле hosts (например, 127.0.0.1 ken.net) на клиенте. Тогда тестирование станет проще без перенастройки URL-адресов и различного поведения в зависимости от конфигурации.