将 TYPO3 多树中的页面树转换为 SSL

Conversion of a pagetree within a TYPO3 multitree to SSL

在多树 TYPO3 项目中,只有一棵树应该迁移到 SSL。为此,我必须将此树中所有页面的 url_scheme 设置为 "https"。但是由于面比较多,手动解决效率不高

页面树示例

+-- TYPO3 6.2 LTS
+--+-- Pagetree A (DE)               // need only this pagetree converted to SSL
+--+--+-- Pagetree A Subpage 1 (DE)
+--+--+-- Pagetree A Subpage 2 (DE)
+--+--+-- Pagetree A Subpage 3 (DE)
+--+-- Pagetree B (EN)
+--+--+-- Pagetree B Subpage 1 (EN)
+--+--+-- Pagetree B Subpage 2 (EN)
+--+--+-- Pagetree B Subpage 3 (EN)
+--+-- Pagetree C (FR)
+--+--+-- Pagetree C Subpage 1 (FR)
+--+--+-- Pagetree C Subpage 2 (FR)
+--+--+-- Pagetree C Subpage 3 (FR)
+--+-- Pagetree D (COM)
+--+--+-- Pagetree D Subpage 1 (COM)
+--+--+-- Pagetree D Subpage 2 (COM)
+--+--+-- Pagetree D Subpage 3 (COM)

以下 SQL 命令可用于将 所有 页面设置为所需的值:

UPDATE pages SET url_scheme = 2

但我只需要一个 SQL 更新命令用于我的单个 pagetree (A)。 有谁知道 SQL 命令会如何查找它?

灵感来自这里:https://www.wacon.de/typo3-know-how/umstellung-von-http-auf-https-mit-typo3.html

如果每个 PageTree 都有不同的 URI,您可以尝试使用 .htaccess RewriteCond 直接重定向到您的 SSL 版本:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.tld$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

否则你必须确定哪些子页面属于"Pagetree A"。一个简单的 SQL 查询可以是:

UPDATE pages SET url_scheme = 2 WHERE pid = UID_OF_PAGETREE_A OR uid = UID_OF_PAGETREE_A

如果你有不止一个树级别,那会很复杂。然后你必须找到页面树的 uid,然后更新这些页面,像这样更新你的第二个页面树:

UPDATE pages SET url_scheme = 2 WHERE pid IN (SELECT uid FROM pages WHERE pid = UID_OF_PAGETREE_A)

您可以使用 cf_cache_rootline table 检索递归子页面列表。在 SQL 中这样做有点难看,因为您需要手动解析序列化数组,但它有效:

使用以下查询检查您是否获得了一些合理的数据:

set @pid = 40; select REPLACE(identifier, '__0_0_0', '') as ids from cf_cache_rootline where content like CONCAT('%"pid";s:', LENGTH(@pid), ':"', @pid, '"%' ) and identifier like '%\_\_0\_0\_0';

那么更新将是(给定 PageTree A 的 uid=40):

SET @pid = 40;
UPDATE pages SET url_scheme = 2 WHERE uid = @pid OR uid IN (select REPLACE(identifier, '__0_0_0', '') FROM cf_cache_rootline WHERE content LIKE CONCAT('%"pid";s:', LENGTH(@pid), ':"', @pid, '"%' ) AND identifier LIKE '%\_\_0\_0\_0');

还有一个站点注释,要为该子树永久启用 url_scheme=2,您可以添加页面 TSConfig,为新页面设置它:

[PIDinRootline = 40]
TCAdefaults.pages.url_scheme = 2
[global]