URL 使用 HTTPS / www 重写不适用于子页面
URL rewrite with HTTPS / www not working for subpages
我必须在我的 .htaccess 中进行以下配置。第一条规则将 https 放在 URL 之前,第二条规则将 www 放在 URL 之前,如果尚未设置的话。
# https redirect
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# www redirect
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这些重定向非常适合主页。但是,如果您调用子页面,这些规则将不起作用。
domain.xy -> https://www.domain.xy (works, Homepage)
domain.xy/contact -> http://domain.xy/contact (doesnt work)
奇怪的是,favicon 得到了正确的重定向。联系页面示例,如上所见
this picture.
怎么可能,我的配置只适用于顶层,不适用于任何子页面?
我会说你的 RewriteRule
是错误的。它应该是 .*
而不是 ^
:
# https redirect
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# www redirect
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
问题出在 .htaccess 文件中的另一条规则。我们的托管服务提供商会自动生成适合 Typo3 安装的 .htaccess。我必须在以下几行之前放置我的重写规则:
# If the file/symlink/directory does not exist => Redirect to index.php.
# For httpd.conf, you need to prefix each '%{REQUEST_FILENAME}' with '%{DOCUMENT_ROOT}'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^.*$ %{ENV:CWD}index.php [QSA,L]
据我所知,这条规则会将任何请求(不是文件、目录或符号链接)重定向回 index.php
。所以在我的例子中,如果我调用 domain.xy/contact
,它会重定向回 index.php
.
因为这条规则的末尾有 [L]
标志,.htaccess 在这里停止处理。所以我将我的两个规则都移到了这个块之上,并且在这个块开始运行之前调用它们。
我必须在我的 .htaccess 中进行以下配置。第一条规则将 https 放在 URL 之前,第二条规则将 www 放在 URL 之前,如果尚未设置的话。
# https redirect
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# www redirect
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
这些重定向非常适合主页。但是,如果您调用子页面,这些规则将不起作用。
domain.xy -> https://www.domain.xy (works, Homepage)
domain.xy/contact -> http://domain.xy/contact (doesnt work)
奇怪的是,favicon 得到了正确的重定向。联系页面示例,如上所见 this picture.
怎么可能,我的配置只适用于顶层,不适用于任何子页面?
我会说你的 RewriteRule
是错误的。它应该是 .*
而不是 ^
:
# https redirect
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# www redirect
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
问题出在 .htaccess 文件中的另一条规则。我们的托管服务提供商会自动生成适合 Typo3 安装的 .htaccess。我必须在以下几行之前放置我的重写规则:
# If the file/symlink/directory does not exist => Redirect to index.php.
# For httpd.conf, you need to prefix each '%{REQUEST_FILENAME}' with '%{DOCUMENT_ROOT}'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^.*$ %{ENV:CWD}index.php [QSA,L]
据我所知,这条规则会将任何请求(不是文件、目录或符号链接)重定向回 index.php
。所以在我的例子中,如果我调用 domain.xy/contact
,它会重定向回 index.php
.
因为这条规则的末尾有 [L]
标志,.htaccess 在这里停止处理。所以我将我的两个规则都移到了这个块之上,并且在这个块开始运行之前调用它们。