Důvod, proč Drupal při aktualizaci přepisuje nejenom složku core a obsah složky vendor, je rozumný. V některých souborech tu mohou být bezpečnostní úpravy, zvláště v takovém .htaccess.
Bohužel to nejde úplně dohromady se změnami, které tvůrce webu v některých přepisovaných souborech potřebuje. Já měním minimálně dva:
- Do robots.txt dopisuje na konec řádek s odkazem na mapu webu pro vyhledávače
- Do .htaccess přidávám přesměrování z http na https, dále edituji a povoluji zakomentované pravidlo pro přesměrování z non www varianty na www adresu.
Poslední týdny a měsíce už mi dost lezlo na nervy, že jsem několikrát zapomenul odkopírovat upravené soubory bokem a po aktualizaci je vrátit. Musel jsem pak změny ručně dopisovat, u některých webů je hledat v automatických zálohách provedených před aktualizací.
A protože jsem si uvolnil ruce dopsáním textů ke knize 333 tipů a triků pro Drupal 9, mohl jsem se zvesela vrhnout na řešení této osiny v zadnici.
Doplnění textů na konec souboru po aktualizaci přes Composer
Nejprve řešení úprav v souboru robots.txt, resp. řešení pro přidání jakéhokoli textu na konec jakéhokoli souboru.
Composer po dokončení scaffoldingu po aktualizaci Drupalu provede všechny zde uvedené definice a v našem případě doplní na konec souboru robots.txt řádky z našeho nového texťáku s úpravami.
Nezapomeňte kód doplněný do composer.json oddělit čárkou. Pokud definice JSONu nebude validní, Composer nebude fungovat.
Jak vyrobit patch pro .htaccess spouštěný po aktualizaci Drupalu
O něco složitější je to s úpravami pravidel v souboru .htaccess. Tady si nevystačíte s doplněním několika řádků načtených z připraveného textového souboru. Je třeba provést úpravy. Samozřejmě automatizovaně, a to pomocí patche.
No jo, ale jak takový patch vytvořit, když nejste programátor? Naštěstí to není nic složitého.
Pokryli jsme tedy dvě možnosti, jak se vypořádat s tím, že Composer přepisuje soubory v Drupalu, které byste rádi nechali s vlastními úpravami, zároveň nechcete kontrolovat, jestli v jádře Drupalu nedošlo k nějakým změnám i v těchto souborech. V reálu možná stačí patch pro obojí a není třeba řešit jeden soubor doplňováním a druhý patchem, ale to je na vás.
Pokud je pro vás i přes uvedených pár kroků vytvoření patche složité, přikládám ten svůj pro .htaccess. Na začátek doplňuje přesměrování z http na https, přidává pravidlo pro odebírání fbclid, které přidávají odkazy z Facebooku a ještě upravuje pravidlo pro přesměrování z non www a www adresu webu:
diff --git a/.htaccess b/.htaccess index 6f9123d1..b642f212 100644 --- a/.htaccess +++ b/.htaccess @@ -1,3 +1,11 @@ +RewriteEngine On +RewriteCond %{HTTPS} !on +RewriteCond %{HTTP:X-Forwarded-Proto} !=https +RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA,NE] + +RewriteCond %{QUERY_STRING} "fbclid=" [NC] +RewriteRule (.*) /$1? [R=301,L] + # # Apache/PHP/Drupal settings: # @@ -95,9 +103,9 @@ AddEncoding gzip svgz # To redirect all users to access the site WITH the 'www.' prefix, # (http://example.com/foo will be redirected to http://www.example.com/foo) # uncomment the following: - # RewriteCond %{HTTP_HOST} . - # RewriteCond %{HTTP_HOST} !^www\. [NC] - # RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] + RewriteCond %{HTTP_HOST} . + RewriteCond %{HTTP_HOST} !^www\. [NC] + RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # # To redirect all users to access the site WITHOUT the 'www.' prefix, # (http://www.example.com/foo will be redirected to http://example.com/foo)
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Podobné články
Komentáře k článku
Taky možnost. Ale composer pak bude prudit chybovou hláškou a prostě to není správné. Aktualizací je do roka několik a musel byste vždy kontrolovat, jestli to je případ se změnou těchto souborů a tedy nutností je přeci jen přepsat, nebo není. Toto je řešení nastav a zapomeň.
Kedze sa oba tieto subory menia tak raz za rok, nebolo by jednoduchsie uplne zakazat prepisovanie tych suborov?