Smyčka při přesměrování

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

Snažím se rozjet web na nette. Je na této URL:
http://www.bome.cz/document_root/
Píše mi to, ale chybu při přesměrování. Když to, ale zkusím na jiném serveru (zkoušel jsem 2 jiné), tak vše funguje bez problémů.
Zde je PHP info:
http://www.bome.cz/test.php

Mohl by mi někdo poradit o by mohlo být špatně?

romansklenar
Člen | 655
+
0
-

Ty ostatní servery jedou taky na Windows?

Jan Tvrdík
Nette guru | 2595
+
0
-

Nedokázal by jsi zjistit, co způsobuje to přesměrování (myslím který řádek v kterém souboru)?
Zkus deaktivovat autokanonizaci URL v daném presenteru ve startup fázi:

$this->autoCanonicalize = FALSE;
Hanz
Člen | 16
+
0
-

Jeden z těch serverů běží na Windows na Apache a druhý na linuxu.

Když jsem přidal $this->autoCanonicalize = FALSE; tak se mi to nepřesměrovává, ale odkazy nefungují.

David Grudl
Nette Core | 8144
+
0
-

Zkus vypsat Debug::dump( Environment::getHttpRequest()->getUri() );

Hanz
Člen | 16
+
0
-

Kde bych měl vypisovat toDebug::dump( Environment::getHttpRequest()->getUri() );?
Když to dám do BasePresenteru, do startupu tak to nevypíše nic a ani pokud to dám do bootstrapu.

Jediné co mi něco vypisuje je var_dump(Environment::getHttpRequest()->getUri() ); a to jen pokud aplikaci nespustím (bez run()).
Vypisuje to:

object(UriScript)#18 (9) {
  ["scriptPath"]=>
  string(24) "/document_root/index.php"
  ["scheme"]=>
  string(4) "http"
  ["user"]=>
  string(0) ""
  ["pass"]=>
  string(0) ""
  ["host"]=>
  string(11) "www.bome.cz"
  ["port"]=>
  int(80)
  ["path"]=>
  string(24) "/document_root/index.php"
  ["query"]=>
  string(0) ""
  ["fragment"]=>
  string(0) ""
}
Hanz
Člen | 16
+
0
-

Pro jistotu ještě uvedu routry:

$router[] = new Route('index.php', array(
	'lang'	=>	'cs',
	'presenter' => 'Homepage',
	'action' => 'default',
), Route::ONE_WAY);

$router[] = new Route('admin/<presenter>/<action>/<id>/', array(
	'module' => 'Admin',
	'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
));

$router[] = new Route('<lang>/<page>/', array(
	'lang'	=>	NULL,
	'presenter' => 'Homepage',
	'action' => 'Stranky',
	'page' => NULL,
));

$router[] = new Route('<lang>/<presenter>/<action>/<id>/', array(
	'lang'	=>	NULL,
	'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
));
Ondřej Mirtes
Člen | 1536
+
0
-

Jak vypadá .htaccess? A neměla by stránka / být na dvojici Presenter:action Default:default ?

Hanz
Člen | 16
+
0
-

.htaccess mám:

# disable directory listing
Options -Indexes

# configure PHP
# <IfModule mod_php5.c>
#    php_flag magic_quotes_gpc off
#    php_flag register_globals off
# </IfModule>

# mod_rewrite
<IfModule mod_rewrite.c>
	RewriteEngine On
	# RewriteBase /

	# 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]
</IfModule>
Jod
Člen | 701
+
0
-

Nebude to zase tým zakomentovaným RewriteBase?

Hanz
Člen | 16
+
0
-

RewriteBase to není, protože problém přetrvává i s ním.

PetrP
Člen | 587
+
0
-

Není třeba zapomenuté přesměrování v něčem jako BasePresenter.

PetrP
Člen | 587
+
0
-

Mimochodem http://www.bome.cz/app/config.ini

Opatrně na to.

Editoval PetrP (30. 3. 2009 14:23)

Jod
Člen | 701
+
0
-

Takto?
RewriteBase /document_root

Len či to nebude niekde v scriptoch pes zakopaný, či to nejak nepresmeruvávaš.
Ono je niekedy ťažké spojiť dve prasácke veci PHP a IIS do fungujúceho celku :D

kravčo
Člen | 721
+
0
-

Ja som mal tiež podobný problém na IIS, server mi vnucoval do adresy index.php, kým som tam mal SimpleRouter, bolo všetko v poriadku, akonáhle som prešiel na pekné URL cez Route, vyhadzovalo mi nekonečnú presmerovaciu slučku. Problém bol v Presenter::$autoCanonicalize === TRUE, pretože sa bili dve presmerovania:

IIS: http://server.sk/serviceshttp://server.sk/index.php/services
Nette: http://server.sk/index.php/serviceshttp://server.sk/services (auto-canonicalize)

Vyriešil som to, ako som vedel – upravil som routy tak, že obsahujú index.php: 'index.php/<presenter>/<view>'. Nie je to ideálne, no funguje to a iné riešenie som nenašiel. Našiel niekto iný?

Hanz
Člen | 16
+
0
-

Dík moc, je to tím.

David Grudl
Nette Core | 8144
+
0
-

Faktem je, že Nette není pod IIS nijak testované. Konkrétně detekce adres v HttpRequest.php by mohla zlobit. A od ní se mohou odvíjet další problémy. Můžete se na to zkusit podívat, jestli detekované objekty Uri a UriScript obsahují správné data?

romansklenar
Člen | 655
+
0
-

Tak jsem projel unit testy pod IIS7:

NetteWebHttpRequestTest
OK (3 tests, 75 assertions)

NetteWebUriScriptTest
OK (2 tests, 11 assertions)

NetteWebUriTest
OK (6 tests, 44 assertions)

tak aspoň podle nich to vypadá funkčně.

David Grudl
Nette Core | 8144
+
0
-

Zrovna tento test o konfiguraci serveru nic nevypovídá (testy obecně by neměly být na konfiguraci závislé, a je chyba, že některé v Nette zatím jsou). Takže spíš jde o to zjistit, jaké se liší hlavičky v $_SERVER na Apache a v IIS. Jestli Debug::dump( Environment::getHttpRequest()->getUri() ); bude vypisovat ve stejných situacích na obou serverech to stejné.