我正在管理一个网站 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。
我希望这对其他人有帮助。