Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
— | howto:hosting:apache-mod_rewrite [2016/10/29 23:05] (aktuální) – vytvořeno - upraveno mimo DokuWiki 127.0.0.1 | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
+ | ====== Apache - mod_rewrite v příkladech (harvie.cz) ====== | ||
+ | Přesunuto z http:// | ||
+ | |||
+ | Při změně domény jsem trochu předělal již tak zajímavé rewrity (nastavení <a href=" | ||
+ | |||
+ | |||
+ | Mě osobně se toto nastavení rewritu vygooglit nepodařilo a tak mi nezbylo než se mod_rewrite naučit a s tím jsem se zase opět pocvičil ve mnou milovaných i zatracovaných <a href=" | ||
+ | |||
+ | Tady jsou hlavní rewrity, které v současnosti pohání mého Apače, protože platí globálně pro celý server (s dalšíma párset řádkama konfiguráků - když nepočítám ty defaultní): | ||
+ | |||
+ | ===== Nejnovnější verze 2.0 ===== | ||
+ | |||
+ | Zase jsem po dlouhé době šáhnul do nastavení rewritů za účelem zlepšení použitelnosti serveru a snadného přidávání nových domén do hostingu. Starou verzi nastavení najdete níže. | ||
+ | |||
+ | Dříve jsem měl všechny poddomény na harvie.cz namapované na adresáře a hostingy nových domén jsem přidával pomocí přidávání nových hostů do apache, což dělalo docela problémy a nikdy jsem s tímm nebyl spokojený, takže jsem hledal způsob, jak namapovat celou doménu na adresáře a poddomény na podadresáře. | ||
+ | |||
+ | Nejdříve jsem narazil na mod_vhost_alias, | ||
+ | http:// | ||
+ | http:// | ||
+ | Vhost_alias je asi výkonný, ale dělal problémy ve spojení s dalšímy rewrity a ani mi nepostačoval z hlediska omezených možností (ve skutečnosti se mi zamlouval jen kvůli snadné konfiguraci). Rozhodl jsem se tedy vylepšit stávající rewrity. | ||
+ | |||
+ | pokud chceme používat jeden konfigurák pro více domén, je dobré tam šoupnout místo hostnamu hvězdičku a případně i port (to já nemohu, protože používám jeden konfigurák na víc portů - apache nadává, ale nakonec funguje, protože ve skutečnosti k žádné kolizi dojít nemůže): | ||
+ | |||
+ | <code apache> | ||
+ | NameVirtualHost * | ||
+ | < | ||
+ | ... | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Další věcí, se kterou jsem si trochu vyhrál je reverzní proxy na jiné stroje (v mém případě virtuální server). Na to je potřeba následující konfigurace a zavedení modulů poznamenaných v komentářích: | ||
+ | |||
+ | <code apache> | ||
+ | #Proxy | ||
+ | #mods: proxy_connect proxy_http proxy rewrite | ||
+ | # | ||
+ | ProxyRequests Off | ||
+ | <Proxy *> | ||
+ | AddDefaultCharset off | ||
+ | Order deny,allow | ||
+ | Allow from all # | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Potom každou reverzní proxy nastavíme zvlášť, jako v tomto případě, kde všechny požadavky na vserver.harvie.cz přepošlu na http:// | ||
+ | |||
+ | <code apache> | ||
+ | #vservers | ||
+ | RewriteCond %{HTTP_HOST} ^vserver\.harvie\.cz | ||
+ | RewriteRule ^/(.*) http:// | ||
+ | </ | ||
+ | |||
+ | A když už víme, jak předat dotazy, které jdou mimo náš stroj, můžeme se věnovat těm, které musíme skutečně obsloužit sami. | ||
+ | |||
+ | V kódu níže můžete vidět, že se nám dvakrát opakují podobné tři řádky... | ||
+ | První RewriteCond vždy zakáže parsování pokud je místo hostname poskytnuta pouze IPv4 adresa. Pokud máte více síťových rozhraní, možná se vám to naopak bude hodit. Pokud ale používáte IPv6 spojení na server, budete muset ještě přidat pravidlo na vyfiltrování požadavků na IPv6 adresy bez specifikace hostname. | ||
+ | |||
+ | Zbylé dva řádky už dělají tu podstatnou práci - tj. mapování domén a poddomén na adresářovou strukturu. | ||
+ | |||
+ | Sekce označená DOMAINS se využije pouze pro případy, kdy hostname obsahuje jen jednu tečku. Potom např. požadavek na doménu harvie.cz přesměruje do adresáře / | ||
+ | |||
+ | Tady bych rád poznamenal, že se může hodit upravit rewrite, aby tam bylo něco jako %1.%2/ | ||
+ | |||
+ | Další sekce označená SUBDOMAINS už vyřizuje dotazy s více jak jednou tečkou v hostname a to tím způsobem, že www.harvie.cz přepíše do domains/ | ||
+ | |||
+ | A tady už je kód: | ||
+ | |||
+ | <code apache> | ||
+ | #DOMAINS | ||
+ | RewriteCond %{HTTP_HOST} !(^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*) | ||
+ | RewriteCond %{HTTP_HOST} ^([^\.]*)\.([^\.]*)$ | ||
+ | RewriteRule (.*) / | ||
+ | #SUBDOMAINS | ||
+ | RewriteCond %{HTTP_HOST} !(^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*) | ||
+ | RewriteCond %{HTTP_HOST} (.+)\.(.*)\.(.*)$ | ||
+ | RewriteRule (.*) / | ||
+ | </ | ||
+ | |||
+ | Ještě bych poznamenal, že v případě nutnosti je možné rewrite snadno upravit tak, aby se harvie.cz nepřepsalo do domains/ | ||
+ | |||
+ | Toť vše a jedinná věc, která mi skutečně zůstala z minulé verze nastavení je přesměrování některých souborů/ | ||
+ | |||
+ | <code apache> | ||
+ | #společná favicona: | ||
+ | RewriteRule favicon\.ico / | ||
+ | #css, který používám v apache autoindexu (listingu): | ||
+ | RewriteRule harvie-admin\.css / | ||
+ | #a ikonky vyžadované opět autoindexem: | ||
+ | RewriteCond %{REQUEST_URI} ^/ | ||
+ | RewriteRule icons/(.*) / | ||
+ | </ | ||
+ | |||
+ | ===== Verze 1.2 ===== | ||
+ | |||
+ | 1.) Povolíme rewritování: | ||
+ | <code apache> | ||
+ | |||
+ | 2.) ZINA JuKeBox si nerozumí s poddoménou, | ||
+ | <code apache> | ||
+ | RewriteCond %{HTTP_HOST} ^music.harvie\.cz | ||
+ | RewriteRule (.*) http:// | ||
+ | </ | ||
+ | |||
+ | 3.) Novinka! potřebuju přesměrovat URL ze staré domény harvie.ath.cx na novou harvie.cz - včetně poddomén a jak pro HTTP tak pro HTTPS: | ||
+ | - URL bez subdomén: | ||
+ | <code apache> | ||
+ | RewriteCond %{HTTP_HOST} ^harvie\.ath\.cx$ | ||
+ | RewriteRule (.*) http:// | ||
+ | |||
+ | |||
+ | #Pro SSL: | ||
+ | RewriteCond %{HTTPS} on | ||
+ | RewriteCond %{HTTP_HOST} ^harvie\.ath\.cx$ | ||
+ | RewriteRule (.*) https:// | ||
+ | </ | ||
+ | |||
+ | - URL se subdoménou | ||
+ | <code apache> | ||
+ | RewriteCond %{HTTP_HOST} ^(.*).harvie\.ath\.cx$ | ||
+ | RewriteRule (.*) http:// | ||
+ | |||
+ | #Pro SSL: | ||
+ | RewriteCond %{HTTPS} on | ||
+ | RewriteCond %{HTTP_HOST} ^(.*).harvie\.ath\.cx$ | ||
+ | RewriteRule (.*) https:// | ||
+ | </ | ||
+ | |||
+ | 4.) Potřebuju nejaka-subdomena.harvie.cz transparentne namapovat (rewritnout) na / | ||
+ | <code apache> | ||
+ | RewriteCond %{HTTP_HOST} ^(.*).harvie\.cz | ||
+ | RewriteRule (.*) / | ||
+ | </ | ||
+ | |||
+ | 5.) Potřebuji, aby soubor favicon.ico a admin.css byl stejný pro komplet všechny domény/ | ||
+ | <code apache> | ||
+ | RewriteRule favicon\.ico / | ||
+ | RewriteRule harvie-admin\.css / | ||
+ | </ | ||
+ | |||
+ | 6.) Protože nechci, aby mě google penalizoval za dvojitý výskyt stejného obsahu, přidal jsem ještě do adresáře s blogem následující soubor < | ||
+ | <code apache> | ||
+ | RewriteEngine On | ||
+ | RewriteCond %{REQUEST_URI} /wan/blog | ||
+ | RewriteRule (.*) http:// | ||
+ | </ | ||
+ | |||
+ | Ten způsobí, že pokud by někdo na můj blog " | ||
+ | |||
+ | Na závěr poznamenám snad už jen to, že " |