Problém s přesměrováním www

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
darkwind
Člen | 32
+
0
-

Zdravím,
mám drobný problém s přesměrováním – mám stránku stranka.cz a chci, aby mě to přesměrovávalo na www.stranka.cz
To obecně není problém, řešil jsem to vždy přes .htaccess takto:

RewriteCond %{HTTP_HOST} ^([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,QSA,L]

Obecně mi to vždy fungovalo i tak, že když jsem zadal např. stranka.cz/admin, tak mě to přesměruje na www.stranka.cz/admin
Ale z nějakého důvodu mě to nyní přesměrovává vždy na root webu, tj. na www.stranka.cz

Nevím, jestli to není nastavením rout nebo tak něčeho, ale mám to takto (v podstatě podle sandboxu pro modulární aplikaci):

$container->router[] = new Route('index<? \.html?|\.php|>', 'Front:Page:view', Route::ONE_WAY);

$container->router[] = $adminRouter = new RouteList('Admin');
$adminRouter[] = new Route('admin/<presenter>/<action>', 'Dashboard:default');

$container->router[] = $frontRouter = new RouteList('Front');
$frontRouter[] = new Route('<presenter>/<action>[/<id>]', 'Page:view');

Nevíte někdo, co by mohlo tohle divné přesměrování způsobovat?

Verze Nette: 2.0.6 pro PHP 5.3

enumag
Člen | 2118
+
0
-

Možná RewriteBase /.

V každém případě doporučuji jako tu hlavní používat variantu bez www.

darkwind
Člen | 32
+
0
-

No, já v .htaccess mám zakomentovaný rewritebase

# RewriteBase /

V čem je lepší používat verzi bez www? Z minulosti jsem zvyklý používat právě přesměrování na „www“ verzi, ale třeba to od začátku dělám špatně. Má ta verze bez www nějaké výhody?

Díky za odpověď :-)

Editoval darkwind (1. 11. 2012 15:35)

enumag
Člen | 2118
+
0
-

Žádný extra důvod v tom nehledej. ;-) Jde jen o to, že ten www. prefix je přežitek z doby kdy na každém serveru běhalo mnoho různých služeb, každá na své subdoméně (smtp., ftp., ze starších třeba gopher.). Služba webového serveru je ale nyní v podstatě primární, protože je nejpoužívanější. Což postupně vede k odstraňování starého prefixu a přesměrování z www. se tam dává ze zvyku a protože někteří jsou na to ještě zvyklí. Bez toho www. ta adresa imho i lépe vypadá, a úplně nejvíc mne vztáčí weby, které bez www. nefungují.

EDIT: Stručně řečeno, prefix už není v módě. :-)

Editoval enumag (2. 11. 2012 10:12)

darkwind
Člen | 32
+
0
-

Jasně, díky za vysvětlení :-)

Bohužel to ale problém nijak neřeší – stále mě to přesměrovává na base webu. Už jsem nainstaloval i čistý sandbox a beze změny…

Takto teď vypadá můj .htaccess

# disable directory listing
Options -Indexes
# enable cool URL
<IfModule mod_rewrite.c>
	RewriteEngine On
	# RewriteBase /

	# front controller
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d

	RewriteCond %{HTTP_HOST} ^([^\.]+\.[^\.]+)$
	RewriteRule ^(.*)$ http://www.%1/$1 [R=301,QSA,L]

	RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
</IfModule>

Nastavení hostingu by to ovlivňovat nemělo – když jsem to zkusil na statických stránkách (tj. ne na Nette), tak to přesměrovávalo dobře. Nemá někdo prosím nápad, co to může dělat?..

petr.pavel
Člen | 535
+
0
-

Asi to nebude příčina tvého problému, ale nejdřív přesměrovávej na www a teprve pak testuj, jestli to není soubor nebo adresář. Ty podmínky jsou tam kvůli „požírání“ požadavků indexem, takhle by ti to nepřesměrovávalo, kdybys požadoval statický soubor/adresář.

RewriteEngine On
# RewriteBase /

RewriteCond %{HTTP_HOST} ^([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,QSA,L]

# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]

Pro info, tady je syntaxe, kterou používám já, když chce klient doménu s www. Jinak taky dávám přednost non-www.

# if a domain name doesn't begin with www
RewriteCond %{HTTP_HOST} !^www

# redirect with 301 = moved permanently, making it the last mod_rewrite rule
RewriteRule .* http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

(Jo, „chybí“ mi tam QSA, ale ten se tam nemá jak dostat, ne? ;-)

Jestli máš přístup k httpd.conf, tak si můžeš zapnout logování mod_rewrite a ladit, proč se ti co kam přesměrovává. Případně aspoň zvenku sleduj, přes co cestuješ, když stáhneš stránku wgetem:

wget --server-response http://stranka.cz/admin
enumag
Člen | 2118
+
0
-

Zkoušels tu RewriteBase odkomentovat, že? Polovina mých problémů s mod_rewrite byla způsobená tadytím.

Jinak varianta, kterou používám já, vypadá trošku jinak:

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]