Fórum Root.cz
Hlavní témata => Server => Téma založeno: Ferda 19. 01. 2016, 01:30:41
-
Čus,
Po internetu koluje hodně variant na to jak přesměrovat doménu na www ale mají menší odchylky.
Znaky: "!" "^" atd.
Dokáže mně někdo najít a popsat proč, který je správný a univerzální zápis
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.*)
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
DirectoryIndex /__rekonstrukce/__index.html
RewriteEngine On
RewriteCond %{HTTP_HOST} !www\.(.*)
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
DirectoryIndex /__rekonstrukce/__index.html
RewriteEngine On
RewriteCond %{HTTP_HOST} www\.(.*)
RewriteRule !^(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
DirectoryIndex /__rekonstrukce/__index.html
-
Čus,
Po internetu koluje hodně variant na to jak přesměrovat doménu na www ale mají menší odchylky.
Znaky: "!" "^" atd.
Dokáže mně někdo najít a popsat proč, který je správný a univerzální zápis
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.*)
RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
DirectoryIndex /__rekonstrukce/__index.html
RewriteEngine On
RewriteCond %{HTTP_HOST} !www\.(.*)
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
DirectoryIndex /__rekonstrukce/__index.html
RewriteEngine On
RewriteCond %{HTTP_HOST} www\.(.*)
RewriteRule !^(.*) http://www.%{HTTP_HOST}/$1 [R=301,L]
DirectoryIndex /__rekonstrukce/__index.html
První a druhý se budou chovat totožně, pokud tam nebudete mít domény končící „www“, třeba „foowww.bar“ (první v takovém případě bude fungovat dobře, druhý nebude přesměrovávat). Třetí je špatně, pokusí se přesměrovat „www.bar“ na „www.www.bar“, ale jen „bar“ přesměrovávat nebude.
Co se týká znaků ! a ^:
! znamená negaci, tj. udělej to, pokud to neodpovídá. Ve třetím případě chybí, tedy to pravidlo říká, udělej to, pokud doména obsahuje „www.“.
^ označuje začátek textu (resp. řádku). „www\.“ zachytí jakoukoliv doménu obsahující „www.“, včetně třeba „foowww.bar“¸či „foo.www.bar“. „^www\.“ naproti tomu říká, že to to jméno musí začínat (ne jen obsahovat) „www.“. Dohromady „!^www\.“ tedy říká, že to jméno nesmí začínat „www.“ (ale může to obsahovat kdekoliv jinde), aby se pravidlo uplatnilo.
-
Mazec dík
-
Počkat... Takže tyhle příklady hodí "www" i před doménu třetího řádu? To pak můžu lidem vysvětlovat jakkoliv, že "www" zdaleka neznamená povinnost...
-
mozna jsem nepochopil, cemu ma pomoci to rewrite, ale kdyz tak zvazte zaznamy v DNS : A a CNAME, a v konfigu webserveru pak uvest vsecky varianty www,www2,...
... zda se mi to jednodussi
-
A nebo se to udela spravne ... pomoci http forward ...
-
Tyhle nespolehlivy rewrite matlaniny jsem taky nikdy nechapal. Nastesti tohle proste funguje (opak Tvyho pripadu):
<VirtualHost *:80>
ServerName dzavy.net
DocumentRoot /home/dzavy/web/dzavy.net
</VirtualHost>
<VirtualHost *:80>
ServerName www.dzavy.net
Redirect 301 / http://dzavy.net/
</VirtualHost>
-
Tyhle nespolehlivy rewrite matlaniny jsem taky nikdy nechapal. Nastesti tohle proste funguje (opak Tvyho pripadu):
<VirtualHost *:80>
ServerName dzavy.net
DocumentRoot /home/dzavy/web/dzavy.net
</VirtualHost>
<VirtualHost *:80>
ServerName www.dzavy.net
Redirect 301 / http://dzavy.net/
</VirtualHost>
trochu neefektivní metoda ne? :-D aneb kilometrovej konfigurák místo pár řádků ve vámi nazvaném "nespolehlivém" rewritu :-D
-
trochu neefektivní metoda ne? :-D aneb kilometrovej konfigurák místo pár řádků ve vámi nazvaném "nespolehlivém" rewritu :-D
Naopak, tohle je jedina spravna metoda ... protoze misto www tam muzes dat *. a proste at tam napise kdo chce co chce, posle ho to na web. Rewrite ma smysl resit, pokud menis strukturu webu a nechces aby prestaly fungovat puvodni linky. Napr. Naopak, pokud chces aby te google vyradil z vyhledavani, tak je rewrite hodne dobra cesta, protoze googlu se to bude jevit jako hromada webu s totoznym obsahem.
-
Naopak, tohle je jedina spravna metoda ... protoze misto www tam muzes dat *. a proste at tam napise kdo chce co chce, posle ho to na web. Rewrite ma smysl resit, pokud menis strukturu webu a nechces aby prestaly fungovat puvodni linky. Napr. Naopak, pokud chces aby te google vyradil z vyhledavani, tak je rewrite hodne dobra cesta, protoze googlu se to bude jevit jako hromada webu s totoznym obsahem.
nějaký podklad na to s tím googlem? v rewritu jde * také efektivně použít... pokud ovšem máte více subdomen, tak u apache platí, že čte konfigurak z hora dolů a potom v tom budete mít bordel...
nikdy jsem neměl s rewritem problémy a pro přehlednost obsáhlých webů je to jediná cesta...
-
Děkuji všem stala se z toho velice zajímavá diskuze.
Přiznám se tohle jsem řešil pokaždé úpravou souboru ".htaccess"
- DNS
Kdybych to řešil pomocí DNS nejsem si jistý jestli se dá vynutit www
Když někdo zadá "test.xx" tak mu to zůstane když někdo zadá "www.test.xx" tak mu taky zůstane nebo se to dá pomocí DNS nějak vynutit ? (i pro subdomény)
- http forward
Tohle se rozhodně nepoužívá pro www je to horší metoda jak Rewrite.
Když se pak něco stane nebo potřebuješ web přesměrovat jseš v .....
jinak http forward mám rovnou u poskytovatele domény (Přesměrování v kodu stránky o tom se nebavim)
<VirtualHost *:80>
ServerName dzavy.net
DocumentRoot /home/dzavy/web/dzavy.net
</VirtualHost>
<VirtualHost *:80>
ServerName www.dzavy.net
Redirect 301 / http://dzavy.net/
</VirtualHost>
Jinak tohle vůbec neznám teda oco se jedná ?
-
To je konfigurace virtuálních serverů v Apache.
-
Nepadlo tady řešení pro situaci, kdy nejsem pánem serveru a webhosting vlastní pravisla pro mod_rewrite nepodporuje (nebo jen velmi omezeně).
Pak přichází na řadu PHP (nebo něco jiného, co na serveru běží) a něco takového:
<?php
if(substr_count($_SERVER['SERVER_NAME'],"www.")==0) {
if(isset($_SERVER['HTTPS'])) {
if($_SERVER['HTTPS']=="on") {
$prot="https://";
}
} else {
$prot="http://";
}
header("Location:". $prot . "www." . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] ."",TRUE,301);
}
?>
Netvrdím, že je to dokonalé, nicméně to pro většinu případů funguje a kde by to nefungovalo (např. vlastní porty pro HTTP) se to dá snadno přiohnout.
-
Jinak za mě - řešil bych to jako fedorac, přes DNS. Jiný řešení mi připadá úplně pošahaně složitý. Ale záleží na situaci, třeba není přístup k nastavení DNS nebo je přes někoho dalšího...
-
nejjednodušší je mod rewrite... teda alespoň pro mě z hlediska přehlednosti než patlání DNS záznamů nebo kilometrové configy
-
Jinak za mě - řešil bych to jako fedorac, přes DNS. Jiný řešení mi připadá úplně pošahaně složitý. Ale záleží na situaci, třeba není přístup k nastavení DNS nebo je přes někoho dalšího...
Řešení přes DNS s sebou nese riziko penalizace od vyhledávčů.
-
Pavouk106: Muzes me napsat jak je podle tebe zpravny zapis do DNS aby to bylo i pro subdomeny a vynucene www ?
-
bože totálně dopatláš DNS záznamy... takto se to nedělá..
-
DNS je primarne len preklad host nemeov ("slovnych adries") na ip adresy... Ak v DNS nebude zaznam pre (bez www) domenta.tld, zbytocne sa spravi akykolvek rewrite na HTTP servry, nakolko sa tam ten request ani nedostane. Je dost pravdepodobne ze sa da takyto redirect dosiahnut aj cez TXT recordy, ale uchadza mi zmysel takej komplikacie.
Cize DNS A, alebo CNAME IMO musis mat pre oba zaznamy tak ci tak, ak ma mat ten rewrite zmysel.
Potom je to o tom ci presmerovavat, alebo nie. Vela vyhladavacov vsak berie web len pod jednym host nameom, cize by rozlicne * .domena.tld bral ako rozlicne weby a toto IMO sposobuje tu penalizaciu.