使用自定义网站和 wordpress 重写问题

使用自定义网站和 wordpress 重写问题

我正在管理一个网站 tasteporto.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/

我知道这是一件非常简单的事情,但我已经研究同一个问题太久了,需要一些帮助。有人能提供一些建议吗?

来自重写地狱的感谢

答案1

可能是由以下规则衍生的问题:

# 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]

答案2

谢谢您的回复,我非常感激。

经过反复尝试,我终于找到了答案。问题出在博客部分的重写规则基线。

首先,增加访问和错误日​​志文件的日志记录是有帮助的。因此,在 /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。

我希望这对其他人有帮助。

相关内容