Jak zabránit přepisování robots.txt a .htaccess při aktualizaci Drupalu přes Composer

Jakmile spustíte aktualizaci Drupalu nebo instalaci modulu přes příkazový řádek a Composer, přepíšou se vám soubory v kořenové složce webu. To je docela nemilé, pokud máte změny v některých souborech. A určitě je máte – minimálně v robots.txt a v .htaccess.

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:

  1. Do robots.txt dopisuje na konec řádek s odkazem na mapu webu pro vyhledávače
  2. 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.

Drupal Composer Scaffolding

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.

Drupal Composer Patch pro .htaccess

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

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Marketing 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.

Komentáře k článku

návštěvník

Kedze sa oba tieto subory menia tak raz za rok, nebolo by jednoduchsie uplne zakazat prepisovanie tych suborov?

Profile picture for user Jan Polzer

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ň.

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Nové diskuze
Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru