Back to Question Center
0

.htaccess syntaxe vícenásobný Semalt

1 answers:

Učím se udržovat svou vlastní stránku WP. Po hodně čtení jsem skončil s mým "kompletním" htaccessovým souborem, který vypadá něco takového

     DirectoryIndex index. php# Zakázat seznamy adresářů
Možnosti - Indikuje
# PROTECT soubor htaccess

Objednávka Povolit, Zakázat
Popřít ze všech

# PROTECT WP-CONFIG

Objednávka Povolit, Zakázat
Popřít ze všech
# Blokovat Hotlinking

RewriteEngine zapnuto
RewriteCond% {HTTP_REFERER}! ^ $
RewriteCond% {REQUEST_FILENAME} -f
RewriteCond% {REQUEST_FILENAME} \ - cost of travel in chile. (jpeg | jpg | png) $ [NC]
RewriteCond% {HTTP_REFERER}! ^ Http: // ([^. ] + \. )?příklad\. [NC]
RewriteCond% {HTTP_REFERER}! Google \. [NC]
RewriteRule \. (gif | jpeg | jpg | png) $ http: // příklad. com / wp-content / images / hotlink. jpg [F, NC, L]
# přesměrovat Mobile z Bloggeru

RewriteEngine Zapnuto
RewriteCond% {QUERY_STRING} ^ m = 1 $
RewriteRule (. *) $ 1? [R = 301, L]
# Blokovat soubory pouze pro zahrnutí. 
RewriteEngine Zapnuto
RewriteBase /
RewriteRule ^ wp-admin / zahrnuje / - [F, L]
RewriteRule! ^ Wp-zahrnuje / - [S = 3]
RewriteRule ^ wp-obsahuje / [^ /] + \ php - [F, L]
RewriteRule ^ wp-zahrnuje / téma-kompat / - [F, L]
# BEGIN WordPress

RewriteEngine Zapnuto
RewriteBase /
RewriteRule ^ index \. php $ - [L]
RewriteCond% {REQUEST_FILENAME}! -f
RewriteCond% {REQUEST_FILENAME}! -d
RewriteRule. /index. php [L]

# END WordPress    

Většina z nich se skládá z kopírování, úpravy a vkládání kódu z různých zdrojů. c> RewriteEngine Zapnuto

správné, nebo by je měl nějak kombinovat a vyhnout se více hovorům?

February 13, 2018
  1. Má roli role pořadí fragmentů kódu? Je to správné ve výše uvedeném příkladu?

Ano, pořadí směrnic v Apache config (. htaccess) mohou být důležité. Ve skutečnosti je prostě špatné uspořádání směrnic běžnou příčinou chyb. S aplikací WordPress se lidé často dopouštějí chyby zahrnující blokovací směrnice po směrnicích WordPress - to je nepravděpodobné, že by fungovalo (i když to závisí na použitých směrnicích / modulech). Především byste měli mít externí přesměrování před interní přepisy .

V tom, co jste zveřejnili, je pořadí směrnic v pořádku.

Měli byste si všimnout, že různé moduly (mod_rewrite, mod_alias atd. ) jsou z velké části nezávislé a běží v různých časech. Ale pro každý modul se směrnice provádějí shora dolů.

RewriteEngine On

Nezáleží na tom příliš mnoho, ale RewriteEngine se musí objevit pouze jednou v souboru, nejlépe nahoře, před jakýmikoli mod_rewrite direktivy (jen proto, že je logičtější a jednodušší číst tak). Nicméně, může být umístěn kdekoli v souboru a bude stále fungovat (na úkor čitelnosti)! Přesně řečeno, pokud máte více směrnic RewriteEngine , pak poslední vyhraje a řídí celý soubor. Takže pokud by poslední RewriteEngine směrnice byla RewriteEngine Off , pak by bylo Off pro celý soubor!

V kódu, který jste odeslali, je zbytečné kontrolovat, zda je modul načten několikrát. Ve skutečnosti to asi vůbec nepotřebujete. Může být váš web spuštěn "OK" (nebo si přejete povolit přístup) bez povolení mod_rewrite? Pokud tomu tak není, není potřeba zkontrolovat to - mělo by prostě selhat s vhodným chybovým stavem.

RewriteBase /

V mnoha případech směrnicích RewriteBase by se mělo v ideálním případě zabránit, i když v tomto případě bude fungovat v pořádku. Poslední direktiva RewriteBase v konfiguračním souboru vyhrává a ovládá celý konfigurační soubor (jako výše uvedená direktiva RewriteEngine . Pokud zahrnujete směrnici RewriteBase , měla by se skutečně zahrnout jen jednou bezprostředně pod směrnici RewriteEngine .

Jak se stane, kromě drobné chyby uvedené níže, ve skutečnosti nevyžadujete směrnici RewriteBase v souboru uvedeném výše. RewriteBase přepíše předponu adresáře, která je přidána k relativním náhradám cesty v RewriteRule . Nemáte žádné relativní cesty - kromě toho, co je uvedeno níže. )

Po opakování v. htaccess je běžné, když je automaticky upravuje více modulů. Ruční kódování konfiguračního souboru (doporučeno) je možné zabránit tomu.

RewriteRule (. *) $ 1? [R = 301, L]

Tento řádek je omylem. Tím, že je to externí přesměrování , měli byste opravdu mít lomítko na náhradě, tj. / $ 1? (i když směrnice RewriteBase definovaná jinde skutečně ušetří - i když to vypadá spíše jako "štěstí" spíše než úmyslné).

Ale co je důležitější, měli byste odstranit místo v příznaky RewriteRule tj. [R = 301, L] . Mezera je oddělovač v konfiguračních souborech Apache (tj. velmi speciální). Má-li zde místo, výsledkem bude chyba 500 interního serveru, protože poslední argument (příznaky ) je předčasně ukončen a je viděn jako [R = 301, .