Django — довольно постоянные ссылки WordPress отказывают по SSL — 404 Файл не существует

Я не могу заставить WordPress довольно постоянные ссылки работать на сервере Ubuntu с Apache, Django и SSL. Конфигурация работает нормально, если я отключаю SSL, но не с включенным. С включенным SSL каждая постоянная ссылка wordpress (которая не отображается на физический файл) приводит к 404 и записи в журнале ошибок apache, например

File does not exist: /var/www/wpwrap/wordpress/hello-world

Я перепробовал десятки & Предлагаемые в Интернете решения (подавляющее большинство для установок без SSL) — ничего не помогло. Я приправлен определением конфигов Apache (но не WordPress) и являюсь администратором этой машины.

1. Моя настройка apache

  • apache2.conf
    • в основном из коробки, не содержит <Directory> или же <VirtualHost> записи
    • грузы conf.d/* затем sites-enabled/*
  • httpd.conf (пусто)
  • сайты с поддержкой / по умолчанию-000

    • Готовое содержимое до этого. (Мой отдельный 443 хост, указанный ниже, перенаправляет весь http-трафик на https, поэтому этот файл должен быть спорным). Для устранения этой проблемы я изменил КАЖДЫЙ <Directory> запись в этом файле, чтобы явно содержать эти 2 строки. Нет эффекта.

      Options FollowSymLinks
      AllowOverride All
      
  • conf.d / my-ssl-site.conf — Моя конфигурация CORE

    <Location />
    # preexisting, works fine
    <IfModule mod_rewrite.c>
    RewriteEngine on
    # force www prefix for plain example.com;
    RewriteCond %{HTTP_HOST} ^example\.com
    RewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [R=permanent,L]
    # force ssl
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=permanent]
    </IfModule>
    </Location>
    
    <VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin admin@example.com
    DirectoryIndex index.html
    ErrorLog "|/usr/sbin/rotatelogs -f -l /var/log/django/error.log.%Y.%m.%d 25M"CustomLog "|/usr/sbin/rotatelogs -f -l /var/log/django/access.log.%Y.%m.%d 25M" combined
    
    #FOR REWRITE DEBUGGING
    #RewriteLogLevel 10
    #RewriteLog /var/log/django/rewrites.log
    
    # =======   RUN DJANGO/PYTHON THROUGH WSGI MODULE OF APACHE ==============
    # pre-existing, works fine
    WSGIScriptAlias / /path_to_my/wsgi.py
    WSGIDaemonProcess example.com processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup example.com
    
    SSLEngine on
    # additional SSL config stuff snipped from here
    
    # ==== WORDPRESS Settings
    Alias /blog /var/www/wpwrap/wordpress
    <IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
    </IfModule>
    <Directory /var/www/wpwrap/wordpress>
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    DirectoryIndex index.php
    
    #pretty permalink setup, as defined by wordpress Admin UI
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /blog/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /blog/index.php [L]
    </IfModule>
    </Directory>
    
    #Added these directories during wordpress troubleshooting - no effect
    <Directory />
    Options FollowSymLinks
    AllowOverride All
    </Directory>
    <Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
    </Directory>
    <Directory /usr/lib/cgi-bin/php5-fcgi>
    Options FollowSymLinks
    AllowOverride All
    </Directory>
    </VirtualHost>
    
  • Нет другого <Directory> конфиги или <VirtualHost> конфиги или AllowOverride строки на сайтах включены, conf.d или даже в модах, где угодно в / etc / apache2.

2. Настройка сервера

  • Существующий, работающий конфиг (работает в течение года)
    • Ubuntu 12.04
    • Apache 2.2.6 (mpm_worker НЕ префорк)
    • Джанго (mod_wsgi)
      • Джанго обслуживает базовые URL в /
    • mod_rewrite
    • virtualhost на 443 (mod_rewrite переносит весь трафик на 443), SSL-сертификат
  • Новое для WordPress
    • WordPress 4.2.1 (чтобы работать рядом с уже существующим Django)
      • WordPress служит URL-адреса в / блог
      • Файлы WordPress живут по адресу / var / www / wpwrap / wordpress
    • mod_fastcgi и php-fpm
      • Сервер работает хорошо с рабочим mpm, поэтому я установил хорошо документированное решение (php-fpm & mod_fastcgi), чтобы заставить PHP работать с Apache работающим mpm вместо понижения Apache до prefork mpm только для wordpress.

3. Что работает:

  • Довольно постоянные ссылки без SSL (если я просто поменяю vhost с 443-> 80)
  • Пользовательский интерфейс WordPress через SSL
  • Любой URL WordPress, который отображается на физически существующий файл
  • Django, SSL, существующие переписывает

4. Прочие вещи, которые пробовали, кроме предметов, указанных выше:

Не влияет на 404 и ошибка с любым из следующего:

  • Изменение порядка конфигурации виртуального хоста (mod_wsgi выше / ниже wordpress)
  • Перемещение всех настроек vhost в сайты с включенным / default-ssl и перезагрузка
  • Игра с группой (www-data) & разрешения (775) файлов WordPress
  • Изменение порядка загрузки conf.d / * и сайтов с включенным / *
  • Бьюсь головой о стену 🙂

1

Решение

Решил это.

Проблема была в конфликте с <Location> блок, содержащий другой набор правил перезаписи. Хотя правила не должны были вступать в противоречие (с точки зрения регулярных выражений), правила местоположения каким-то образом блокировали выполнение правил Справочника, поэтому они никогда не выполнялись вообще.

Основано на документах Apache, в которых говорится, что Rewrites официально не поддерживаются в <Location> блоки, я перенес все <Location> переписывает в <VirtualHost> записи для портов 80 & 443 в моем файле conf.d / my-ssl-site.conf. Теперь все работает.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector