Я управляю веб-сайтом вкусаporto.com, который представляет собой простой php / mysql с частью блога в wordpress.
На основном веб-сайте у меня есть следующие правила перезаписи apache
RewriteEngine On
RewriteBase /
# no-www to www
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301]
# http to https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301]
# if not blog, make URLs pretty
RewriteCond %{REQUEST_URI} !^.*\/blog\/.*$ [NC]
RewriteCond %{REQUEST_URI} ^.*\/index [NC]
RewriteRule ^(.*)index\.php$ /$1 [R=301,L]
# if not blog, make URLs pretty by removing file extension
RewriteCond %{REQUEST_URI} !^.*\/blog\/.*$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]
В каталоге wordpress у меня есть стандартные правила плюс одно, чтобы убедиться, что они применяются к пути к блогу:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^.*\/blog\/.*$ [NC]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} ^.*\/blog\/.*$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Все обычные ссылки на сайте работают нормально, как и стартовая страница для блога.
Проблема в том, что постоянные ссылки Wordpress вроде https://tasteporto.com/blog/ready-for-sao-joao/ сделай это https://www.tasteporto.com/http:/www.tasteporto.com/
Я знаю, что это что-то глупо простое, но я слишком долго смотрел на ту же проблему и мог бы нуждаться в помощи. Кто-нибудь может предложить немного мудрости, пожалуйста?
Спасибо тебе из ада переписать
Спасибо за ответы, я очень ценю их.
После некоторых проб и ошибок я понял это. Проблема была в основе правил перезаписи в части блога.
Во-первых, что-то, что помогло, - это усиление логирования файлов журнала доступа и ошибок. Итак, в /etc/apache2/mods-available/rewrite.load я добавил вторую строку ниже:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
LogLevel alert rewrite:trace4
Тогда вот изменения в файле конфигурации веб-сайта в sites-available:
RewriteEngine On
# Turn on HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# No-www to www
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
А вот .htaccess на главном сайте:
RewriteEngine On
# if not blog do make URLs pretty
# by removing .php extensions
RewriteCond %{REQUEST_URI} !^.*\/blog\/.*$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]
И, наконец, .htaccess в каталоге блога:
RewriteEngine On
RewriteBase /blog
RewriteCond %{REQUEST_URI} ^/blog
RewriteRule ^/blog/index\.php$ - [L]
RewriteCond %{REQUEST_URI} ^/blog
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
Основная проблема заключалась в том, что последний бит RewriteBase был изменен на / blog.
Надеюсь, это поможет другим.
Проблема может быть вызвана следующими правилами:
# http to https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301]
Пожалуйста, попробуйте изменить его на:
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{SERVER_NAME}/%{REQUEST_URI} [R=301,L]