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

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
Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal a Symfony. Obojí také školím spolu se základy SEO. Jsem Acquia Certified Developer a Site Builder a napsal jsem několik knih o Drupalu. Ve volných chvílích cestuji a podnikám výlety. Více se dozvíte na mém firemním webu.

reklama

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ář

Filtered HTML

  • Povolené HTML značky: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <p> <br>
  • Řádky a odstavce se zalomí automaticky.
  • Web page addresses and email addresses turn into links automatically.

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

reklama
Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Poslední komentáře
reklama
Nové diskuze
reklama
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.

Knihy o Drupalu

Kniha Drupal 8 Kniha Drupal 7 333 tipů a triků pro Drupal
Více na KnihyPolzer.cz

@maxiorel na Twitteru

Maxiorel na Twitteru