Smyčka při přesměrování
- Hanz
- Člen | 16
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ě?
- Jan Tvrdík
- Nette guru | 2595
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
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
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
Jak vypadá .htaccess? A neměla by stránka /
být na dvojici
Presenter:action Default:default ?
- Hanz
- Člen | 16
.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>
- kravčo
- Člen | 721
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/services
→
http://server.sk/index.php/services
Nette: http://server.sk/index.php/services
→
http://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ý?
- David Grudl
- Nette Core | 8228
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
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 | 8228
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é.