Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno .htaccess a mod_rewrite

Mám následující problém:
Firma převzala tvorbu webových stránek jiné firmy, umístěných na web4u.cz. Je tam mj. soubor .htaccess, který obsahuje např. tyto řádky:

RewriteEngine on
RewriteRule ^cs/$ /index.php?lg=cs [L] 

1. Vše jsem si zkopírovala na náš server (nebudu přece úpravy v něčem, o čem ani zatím pořádně nevím jak to funguje dělat rovnou na ostrém serveru).

2. Spustím to na našem testovacím serveru: index.php
Tahle úvodní stránka se načte bez problémů.

3. Upravila jsem .htaccess:

Options +Indexes
Options +FollowSymLinks
RewriteEngine on
RewriteBase /spg
RewriteRule ^cs/$ /index.php?lg=cs [L]

4. Na té stránce je odkaz cs, který na původním serveru vede k zobrazení té samé stránky. Když na něj kliknu, dostanu Error 404.. Do logu se zapíše:

[Tue Jan 22 10:54:22 2008] [error] [client 172.16.0.52] 
File does not exist: /srv/www/htdocs/cs, referer: http://172.16.0.1/spg/index.php

Poznámka: Cesta, která funguje - index.php není skutečná cesta, ale je to nějaký alias samby.

Děkuji za radu co s tím

Předmět Autor Datum
RewriteRule ^cs/$ /index.php?lg=cs [L] Ty vo vyssom pravidle smerujes na /index.php co je subor v d…
mrazik 22.01.2008 16:15
mrazik
Obě tyhle možnosti jsem zkoušela taky (kromě dalších), nefunguje žádná z nich :.(
Anicka 22.01.2008 16:34
Anicka
Este ma nieco napada... Ten Vas server je Lunux alebo Win? lebo pri windowse musis v rewriteRules z…
mrazik 22.01.2008 16:24
mrazik
Linux se Sambou. Anička
Anicka 22.01.2008 16:35
Anicka
Co musí všude bejt nainstalovanýho a zapnutýho aby to fungovalo? My jsme to dosud na serveru nepouží…
Anicka 22.01.2008 16:43
Anicka
No mal by tam byt apache s php a so zapnutym modulom mod_rewrite. A mali by ste mat moznost cez htac…
mrazik 22.01.2008 16:48
mrazik
Mod rewrite tam admin doinstaloval, tak ho snad taky zapnul. Kde se povoluje možnot přes htaccess mě…
Anicka 22.01.2008 16:56
Anicka
V nastaveniach apachu je direktiva Override All .... ktora vravi ze htaccess moze prepisat vsetky na…
mrazik 22.01.2008 17:02
mrazik
To nevím, v čem je problém, jestli v cestách nebo v blbě nakonfigurovaným serveru :-(. Admin mi teď…
Anicka 22.01.2008 17:54
Anicka
Jedna vec je, že musíš upraviť .htaccess podľa toho, čo je napísané v úplne prvej odpovedi. Ďalšia…
los 22.01.2008 20:38
los
Poznámka pod čiarou: Toto nie je pravda: lebo pri windowse musis v rewriteRules zadavat plnu cestu…
mrazik 23.01.2008 09:17
mrazik
Áno, chcem povedať, že by to šlo. Keď použiješ cestu aj s http, tak sa spraví presmerovanie, čo je t…
los 23.01.2008 20:09
los
no neviem ... mne to na mojom testovacom serveri na windowse neslo .... pokial som tam nedal to http…
mrazik 24.01.2008 10:26
mrazik
Včera som to vyskúšal a šlo to.
los 24.01.2008 12:04
los
.htaccess upraven podle úvodní rady. ModeRewrite funguje - RewriteRule (.*) www.jakpsatweb.cz$1 [R=3…
Anicka 23.01.2008 14:03
Anicka
Pretože na svojej webovej stránke máš odkaz v tvare "/cs/...", tak vďaka tomu lomítku na začiatku sm…
los 23.01.2008 19:59
los
Dík, admin s pomocí Tvých odkazů vytvořil virtual host a teď už to chybu 404 skutečně nehází :-). Al…
Anicka 24.01.2008 14:30
Anicka
A tie odkazy na CSS vyzerajú v zdrojovom kóde HTML stránky ako? Kde sú umiestnené CSS súbory v adres…
los 24.01.2008 20:25
los
Jsem z toho blázen. Obrázky, includy fungují, css ne. Způsoby zápisu ve zdrojáku: a) include "./inc/…
Anicka 25.01.2008 10:50
Anicka
Ok, je to zapísané správne. Zápisy s bodkou a bez bodky nie sú ekvivalentné. Bodka predstavuje aktuá…
los 25.01.2008 11:20
los
Dík, vyřešeno, funguje :-D. Jen jsem musela použít zápis $_GET['lg']., protože náš admin nechce ani… poslední
Anicka 29.01.2008 21:49
Anicka

RewriteRule ^cs/$ /index.php?lg=cs [L]

Ty vo vyssom pravidle smerujes na /index.php co je subor v domovskom adresari tvojho testovacieho servera a teda je logicke ze tam nenajde ziadny subor. Skus tam dat bud index.php bez toho lomitka, alebo /spg/index.php?lg=cs

Teda ak som to spravne pochopil

V nastaveniach apachu je direktiva Override All .... ktora vravi ze htaccess moze prepisat vsetky nastavenia A.
Ale silno predpokladam ze to nastavene mas.

Ja som si myslel ze tvoj problem bude v tych cestach .... ze ti to nesmeruje do spravneho priecinka... ale ked vravis ze si to skusala, tak potom nevieeeem

Jedna vec je, že musíš upraviť .htaccess podľa toho, čo je napísané v úplne prvej odpovedi.

Ďalšia vec je, že potrebuješ upraviť všetky odkazy, ktoré na tých stránkach máš, t.j. namiesto odkazu cs by tam malo byť cs. Takáto vec by sa mala dať nastaviť v nejakom konfiguračnom súbore tých webových stránok. Čiže si v index.php nájdeš, akým spôsobom sa tam vypisuje ten odkaz a podľa toho nájdeš to, čo musíš zmeniť. V najhoršom prípade tam bude priamo ten odkaz - to potom budeš musieť zmeniť všetky také odkazy.

Ako už bolo spomenuté, druhá cesta, ktorou sa môžeš vydať, je vytvorenie virtualhost-u, čo vyžaduje zmenu nastavenia Apache a prípadne aj súboru hosts na počítači, ktorým sa na server pripájaš. V tomto prípade sa nebudú musieť meniť odkazy na žiadnej stránke toho webu. Viac k tomu nájdeš na Google, napr. virtualhost.php.

Poznámka pod čiarou: Toto nie je pravda:

lebo pri windowse musis v rewriteRules zadavat plnu cestu k skriptu (vratane http://)

Edit: To, či sa berie do úvahy .htaccess zistíš jednoducho - napíšeš doňho nejaký nezmysel a server by mal pri každej požiadavke vrátiť chybu servera. No a ak sa berie do úvahy .htaccess, ktorý obsahuje pravidlá pre mod_rewrite a súčasne platí, že server nevracia chybu servera, tak funguje aj mod_rewrite.

Poznámka pod čiarou: Toto nie je pravda:

lebo pri windowse musis v rewriteRules zadavat plnu cestu k skriptu (vratane http://)

Chces povedat, ze :

RewriteRule ^cs/$ index.php?lg=cs [L]

pojde aj na Linuxe aj na Windowse?
To ti neverim ;-)
Ja mam skusenosti, ze na windowse musim mat ten index.php vratane celej cesty localhost....

Ina vec je ked tam pouzijes absolutnu /index.php

.htaccess upraven podle úvodní rady.
ModeRewrite funguje - RewriteRule (.*) www.jakpsatweb.cz$1 [R=301,QSA,L] skutečně přesměruje na jakpsatweb.
Odkazy ve zdrojáku jsou psané jen jako /cs/. Vše předtím (spg) tam prý dodá samba. Odkazy ve zdrojáku se nesmí změnit, protože potřebuju, aby to fungovalo i až to pak nahraju na web4u - musím upravit konfiguraci našeho testovacího serveru tak, aby odpovídala konfiguraci web4u.
Windows mne nezajímají - jede to na Unixu se Sambou, jak je napsáno výše.
Stejně ty odkazy nefungují - asi nezbývá nic jiného než virtual host?

Pretože na svojej webovej stránke máš odkaz v tvare "/cs/...", tak vďaka tomu lomítku na začiatku smeruje požiadavka na "cs...". Tvoja aplikácia je umiestnená v adresári spg, takže sa k nej tá požiadavka nedostane (t.j. obsah súboru .htaccess už nehrá rolu). Keď nechceš zmeniť odkaz z "/cs/..." na napr. "ROOT_DIR . 'cs/...'", tak budeš musieť nastaviť virtuálneho hostiteľa.

Nastaviť virtuálneho hostiteľa nie je nič ťažké a je to popísané aj v tom odkaze, ktorý som už písal (postup je rovnaký, nezáleží na tom, či to beží na Windows alebo nie). Okrem toho je to podrobne popísané v dokumentácii a aj v samotnom konfiguračnom súbore.

V prípade virtuálneho hostiteľa bude súbor .htaccess rovnaký ako originál, ktorý je na pôvodnom webe.

Mimochodom, Samba nedodáva do URL nič - to robí prehliadač, ktorý o samotnej aplikácii nič nevie, takže tam to "spg" chýba.

Dík, admin s pomocí Tvých odkazů vytvořil virtual host a teď už to chybu 404 skutečně nehází :-). Ale nemůže to najít css soubory u stránek, na které vedou odkazy z menu :.(. .htaccess jsem tam dala původní co je na web4u, adresářová struktura je zachovaná.

Jsem z toho blázen. Obrázky, includy fungují, css ne. Způsoby zápisu ve zdrojáku:
a) include "./inc/db_connect.php";
b) <link href="/style/style.css" rel="stylesheet" type="text/css" />
c) <img class="ramecek" src="/img/head-img/home.jpg" />

Ano, je to zapsané správně. První zápis bez tečky na začátku nefunguje, poslední dva zas nefungují s tečkou. Testováno na titulní stránce, na kterou se dostanu buď přímo zadáním adresy do IE nebo odkazem na sebe sama z jejího menu.

Horší je, pokud se rozhodnu přejít z titulní stránky jinam než sama na sebe. Pokud všecky linky, includy, obrázky upravím podle indexu, tak stejně skončím na následujících chybových zprávách:

Notice: Undefined variable: lg in /srv/wwwspg/htdocs/kariera.php on line 4

V indexu ne, protože tam je napsáno, že není-li lg (jazyk) nastaven, pak se mu přiřadí hodnota "cs". A pak by se měl předávat dál na další stránky. V .htaccess jsou zápisy typu:

RewriteRule ^cs/kariera/$ /kariera.php?text=5&lg=cs [L]

tedy proměnná lg se nastavuje. Proč s ní ale nemohu pracovat, když na web4u to zjevně funguje bez problémů?

Ok, je to zapísané správne. Zápisy s bodkou a bez bodky nie sú ekvivalentné. Bodka predstavuje aktuálny adresár, lomítko na začiatku predstavuje koreňový adresár.

Čo zobrazí prehliadač, keď do neho zadáš adresu style.css?

Ako sa pristupuje k premennej lg? Podľa mňa je na webe web4u zapnuté register_globals, takže keď použiješ $lg, tak tam je hodnota z $_GET['lg']. Na tvojom serveri je register_globals vypnuté, takže premenná lg je nedefinovaná. Opravíš to buď nastavením register_globals na tvojom serveri (viď php.net) alebo prepísaním $lg na $_GET['lg'].

Zpět do poradny Odpovědět na původní otázku Nahoru