Нежелательное перенаправление 301 с Apache2 и Wordpress

У меня есть следующая конфигурация моего файла 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>
0
задан 30 June 2019 в 22:15
1 ответ

Wordpress и тому подобное, как будто наивно предполагают, что только один домен указывает на него. (А также тот же протокол на вашем обратном прокси-сервере и бэкэнде. У вас была бы такая же проблема, если бы ваш apache использовал https, а wordpress был обратным прокси-сервером для какой-то другой вещи (другой хост, тот же хост, другая служба)).

Так что, если вы не можете настроить wordpress так, чтобы он не перенаправлял вас (возможно, плагин или исправление php), вам просто нужно убедиться, что URL, который вы установили в wordpress, совпадает с тем, который пользователь использует для перехода на ваш сайт.

Если вы хотите сделать что-то другое в тестовой среде, я рекомендую использовать исходные рабочие URL (в вашем случае http://ken.net , а не http: // localhost ), но изменив их IP-адреса на вашу тестовую среду в вашем файле hosts (например, 127.0.0.1 ken.net) на клиенте. Тогда тестирование станет проще без перенастройки URL-адресов и различного поведения в зависимости от конфигурации.

1
ответ дан 4 December 2019 в 15:40

Теги

Похожие вопросы