У меня следующая конфигурация: мой 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. Если я использую завиток просить /index.php
он работает нормально, но если я прошу рут 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
Каталог mods-enabled
выглядит так:
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
Теперь, когда я знаю ./sites-enabled/*.conf
заявление в основной конфигурации я удалил <DIRECTORY></DIRECTORY>
инструкции из основной конфигурации и в конфигурации сайта по умолчанию (также известной как /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-адресов и различного поведения в зависимости от конфигурации.