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

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
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
.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

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.

.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