2016-12-06 3 views
0

mutlitree TYPO3プロジェクトでは、1つのツリーのみをSSLに移行する必要があります。このため、私はurl_schemeをすべてのページが "https"であるように設定する必要があります。しかし、多くの側面があるので、これを手動で解決することは効率的ではありません。TYPO3マルチツリー内のページツリーのSSLへの変換

次のSQLコマンドが所望の値にすべてページを設定するために使用することができ

+-- 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) 

例ページツリー:

UPDATE pages SET url_scheme = 2 

をしかし、私は(私の単一ページツリーのためのSQLのupdateコマンドを必要としますA)のみ。 誰かが、SQLコマンドがどのようにそれを探すのか考えていますか?これに

インスピレーションはここにあった:あなたは、各ページツリーに異なるURIを持っている場合https://www.wacon.de/typo3-know-how/umstellung-von-http-auf-https-mit-typo3.html

答えて

0

あなたは再帰的なサブページのリストを取得するためにcf_cache_rootlineテーブルを使用することができます。手動でシリアライズされた配列を解析する必要があるとして、それは、一種の醜い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'; 

その後アップデートを(ページツリー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'); 

とサイト・ノートでは、あなたは、ページTSconfigを追加することができ、新たなページのためにこれを設定するには、そのサブツリーのための恒久的url_scheme=2を有効にします

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

あなたのSSLバージョンに直接リダイレクトするように.htaccessのRewriteCondを使用しようとすることができます:

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

そうしないと、あなたは持っていますどのページが「ページツリーA」に属するかを決定する。単純なSQLクエリは次のようになります。

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

複数のツリーレベルがある場合、複雑になります。次に、ページツリーのUIDを見つけなければならないし、また、これらのページを更新するよりも、このようなものは、2番目のページツリー更新whould:

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

http-> httpsリダイレクトにのみ依存するべきではありません。 http://へのリンクは安全ではなく、https://への適切なリンクの代替手段ではありません。 –

+0

"url_scheme"を使用せず、typo3が正しく設定されていれば、内部のリンクはアクティブなスキームによって行われます。だから、すべてのページリダイレクトが起こっているわけではありません。初めての訪問のみ。 –

+0

René、あなたのソリューションは良い選択肢ですが、BenjaminのWayは私が必要とする100%です。ありがとうございました。 – Eckonator

関連する問題