Мультисайтовый Wordpress, SSL и htaccess для использования подпапки в качестве корня

У меня есть сертификат SSL, поэтому http -> https является обязательным (в качестве меры предосторожности). Я намерен иметь несколько поддоменов, то есть subdomain1.example.com, subdomain2.example.com, в настоящее время есть один поддомен, который работает без каких-либо проблем. Я использую многосайтовую установку Wordpress, которая была установлена ​​(намеренно) в одной подпапке. Настройка мультисайта предназначена для других языков. Текущая структура папки сервера выглядит следующим образом:

  • public_html
    • backstage
      • subdomain1 (folder for the subdomain)
    • Главная сцена
      • wp-admin
      • wp-content
      • wp-includes
      • (the rest of the WP files)
    • index.php (тестовый файл, который не должен загружаться, если перенаправление настроено правильно)

В настоящее время www.example.com/frontstage/ открывает основной сайт WP, это нормально. Я могу получить доступ к его wp-admin без проблем. www.example.com/frontstage/en/ показывает страницу 404, это не нормально. www.example.com/frontstage/en/wp-admin/ открывает панель управления для другого сайта.

Я хочу сохранить удаление из index.php любых ссылок (чтобы ссылки оставались чистыми).

Есть две "простых" вещи, которые нужно правильно настроить:

  1. Я хочу сохранить структуру папок сервера как есть, но пропустить папку «frontstage», чтобы при посещении www.example.com загружался основной сайт WP (и в случае, если кто-то загрузит www.example.com / frontstage / перенаправит на www.example.com). Естественно, «сдвиг» должен позволить www.example.com/en/ открывать дополнительный веб-сайт (любые другие языковые сайты, которые могут появиться после). В идеале без переписывания всех ссылок на сайтах WP.
  2. В настоящее время / en / site не загружает свой корень. Демо-записи и страницы загружаются нормально.

Мой текущий .htaccess на корневом уровне выглядит так:

# disable index.php from urls

RewriteEngine On
RewriteBase /

<IfModule mod_rewrite.c>
    # redirect index.php requests
    RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
    RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

# force https and www

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

# move wordpress one level up

# allow subdomain

RewriteRule ^backstage\/subdomain1\/?(.*)$ "https\:\/\/subdomain1\.example\.com\/$1" [R=301,L]

Любая помощь с этим очень ценится (я все еще изучаю биты и трюки htaccess, и этот действительно вне меня). Что мне не хватает в приведенном выше коде, чтобы понять это правильно?


person V____    schedule 24.11.2018    source источник


Ответы (1)


Когда у меня WP установлен во вложенной папке, я просто перехожу в «Настройки» => «Общие» и меняю URL-адрес веб-сайта, удаляя вложенную папку.

После этого я перемещаю файл index.php на один уровень вверх и в вашем случае меняю его на:

 require( dirname( __FILE__ ) . '/frontstage/wp-blog-header.php' );

Решает ли это вашу проблему?

Найдите подробное описание того, как переместить WP в подкаталог на этом сайте. Подробное описание размещения Wordpress в подкаталоге можно найти на следующем веб-сайте https://codex.wordpress.org/Giving_WordPress_Its_Own_Directory

Что касается перенаправления с http на https - это возможно в пределах .htaccess. На мой взгляд, гораздо лучше было бы использовать псевдоним на apache (обычно это должен делать ваш хостер).

Разница:

Перенаправление htaccess возвращается к пользователю, а затем снова к серверу, что требует некоторого времени. Насколько мне известно, псевдоним перенаправлен на сервер.

если вы хотите принудительно использовать https, вы можете сделать это с помощью следующей записи.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
person AnotherArt    schedule 24.11.2018
comment
Попробовав описанную вами процедуру, я получаю пустую стартовую страницу с ошибкой «Невозможно установить соединение с базой данных» - что-то в этом роде, написано большим черным шрифтом (сгенерировано WP, а не сервером). Что касается https, я оставил это в htaccess просто из меры предосторожности, на случай, если срок действия SSL закончится (и я думаю, что скоро перейду на другой сервер, так как не смогу сразу передать SSL). - person V____; 24.11.2018
comment
Разве текущий оператор не просто проверяет, не является ли он https, который будет перенаправлен на ту же ссылку с https, но если это https (как, вероятно, правильно настроен хостом, я получаю ссылки https даже без этого фрагмента кода в htaccess) он просто пропускает какие-либо действия по этому поводу? - person V____; 24.11.2018
comment
Вы сбросили htaccess на оригинальный? - person AnotherArt; 25.11.2018
comment
Если вы имеете в виду htaccess WP, он был нетронутым с самого начала, я внес изменения только в корневой htaccess (мой собственный htaccess, все в папках отлично работает даже без него) - person V____; 25.11.2018
comment
Я бы удалил любой htaccess. - person AnotherArt; 25.11.2018
comment
Я добавил над строками, чтобы принудительно перенаправить https. - person AnotherArt; 25.11.2018
comment
Я очистил корневой htaccess, скопировал /frontend/index.php в корень и изменил его требуемый путь ... происходит то, что FF и Opera показывают сообщение Ошибка установления соединения с базой данных, в то время как IE показывает браузер 500 ошибка. В текущей настройке www.example.com/wp-admin/ возвращает ошибку 404 во всех браузерах. Изменение siteurl и / или домашнего пути базы данных WP не помогает. В то же время www.example.com/frontend/ отображает страницу как следует. / frontend / en / не показывает другой сайт, но / frontend / en / wp-admin / загружает страницу входа. - person V____; 25.11.2018
comment
Осталось решить одну ошибку, я не могу загрузить / en / (индексную страницу вторичного сайта), но ее / en / wp-admin работает без проблем ... все еще нужно подтвердить все это, но так пока все хорошо - person V____; 25.11.2018
comment
Прежде чем я отвечу на свой вопрос (все еще нужно разрешить страницу индекса сайта / en / second) ... решение стало довольно простым после того, как я добавил эти две строки в файлы .htaccess: RewriteCond% {REQUEST_URI}! Front / RewriteRule (. *) / Front / $ 1 [L] Конечно, изменения в папках базы данных (удаление папки внешнего интерфейса из ссылок определения блога и сайтов) также были необходимы, но это не поможет, если .htaccess не будет ' t настроен правильно - person V____; 01.12.2018