« 1 2 »
Autor Zpráva
Trax
Profil
Zdravím diskusi :)

nějak zkoumám jak z www.xxx.xx/index.php?pag=kontakt&lang=cz&act=1

udělat např. www.xxx.xx/cz/kontakt/

- Našel jsem spoustu příkladů, ale nějak tomu stále nerozumím. Můžete mi to prosím někdo alespoň nastínit?


Další problém vidím v tom, že na té stránce kontakt.php mám e-mailový formulář a GET který si bere z URL jestli byl formulář odeslaný nebo ne (act=1). Pokud jsem to ale správně pochopil, tak když se mi podaří to změnit na mnou požadovanou URL a sice www.xxx.xx/cz/kontakt, tak ji musím změnit i u všech odkazů a tedy i v akci formuláře. Když to udělám, bude GET stále fungovat?
Kubo2
Profil
Trax:
Áno, GET parametre budú naďalej PHPkom parsované, ak ich pri prevode adresy explicitne neodstrániš.
Trax
Profil
Kubo2:
Takže nesmím měnit href u odkazů?
Davex
Profil
Trax:
Našel jsem spoustu příkladů, ale nějak tomu stále nerozumím.
1) Postaráš se o to, aby se nově požadovaná cesta předala skriptu jako parametr. Třeba pomocí universálního pravidla.
2) Předanou cestu si v PHP zpracuješ podle potřeby do používaných proměnných.
3) Na všech stránkách změníš odkazy, aby byly v nové podobě.
4) Parametry v GET nepřestanou fungovat.
Trax
Profil
Zase jsem se v tom zamotal. Vzal jsem to teda od začátku hned na Jak psát web.

Pokud jsem to tedy správně pochopil tak když mám:
www.xxx.xx/index.php?pag=kontakt&lang=cz&act=1
a chci:
www.xxx.xx/cz/kontakt/

musím do rootu dát soubor .htaccess a do něj napsat:
RewriteEngine on
RewriteRule    ^(.*)/(.*)    index.php?pag=$2&lang=$1


A pokud jsem správně pochopil tak $1 odkazuje na první závorku (.*) a $2 zase na tu druhou, dále (.*) odpovídá libovolný počet a typ znaků. Je to tak? Akorát tedy nevím, co značí ^.

Co je tam za chyby a nedostatky? Nedokážu se přes to překousat.

Promiňte, že jsem to tu rozebral jak pro blbečky, ale já to opravdu nechápu a proto to chci zkusit od nuly. :)


Zapomněl jsem dodat, že předchozí příklad mi funguje, ale nenačtou se žádné styly ani obrázky.
Kajman
Profil
Trax:
nenačtou se žádné styly ani obrázky
A četl jste to až do konce?
Mod_rewrite » Bacha na interpretaci cest
Trax
Profil
Kajman:
Ano četl, ale nevím, jak z toho vybruslit.
Kubo2
Profil
Trax:
Náhodou si to pochopil veľmi dobre :-) Keď ľudia začínajú s regulárnymi výrazmi, je len veľmi málo takých, ktorí si toľko vecí domyslia. Mimochodm, znak ^ značí začiatok reťazca.

Poďme k tej interpretácii ciest. Prehliadač nepozná tvoju adresárovú štruktúru na serveri. Prehliadač si rozseká všetko od prvého lomítka do prvého otázniku (prípadne mriežky, ak je otáznik neprítomný) a časti medzi lomítkami v adrese berie ako adresáre. Teda pri použití relatívnych ciest v HTML stránkach si prehliadač na tvojom webe myslí, že sa pri prehliadaní nachádza v adresári /cz/kontakt/ a všetky relatívne cesty vytvára na základe toho — t.j. napríklad obrázok ťahá namiesto z /images/obrazok.png z „adresára“ /cz/kontakt/images/obrazok.png
Už tomu rozumieš lepšie?
Trax
Profil
Kubo2:
Aha, už se do toho začínám dostávat. Jdu se na to mrknout. Děkuju. :)


No, takže jsem zjistil, že na URL adrese:
http://localhost/web/cz/kontakt
se mi obrázky načítají z:
http://localhost/web/cz/obrazky/logo/logo.png

V tom případě by mělo stačit přidat k danému obrázku do src ../ a pak by to mělo fungovat.

Po této úpravě se správně odkazuje na onen obrázek a tedy:
http://localhost/web/obrazky/logo/logo.png

Bohužel se mi obrázek stále nezobrazuje. Zkoušel jsem to právě už i před tím, ale stejný problém. Vyzkoušel jsem i ./, protože mi to někdy na localhostu "blblo" (nedokážu si jinak vysvětlit), ale taky nic.


Aha, tak ještě dodatek: Když do URL zadám http://localhost/web/obrazky/logo/logo.png tak mi to nezobrazí ten obrázek ale v podstatě stránku. Když ale .htaccess smažu, tak ho to načte jako samotný obrázek.

Kubo2: Zkouším čarovat s tím otazníkem (pokud je to tím), ale stále se nedaří. Jak z toho ven? :)
Kubo2
Profil
Trax:
V ktorom adresári máš ten .htaccess? Vo /web?
Kajman
Profil
Trax:
nezobrazí ten obrázek ale v podstatě stránku
Proto je lepší nepřepisovat skutečné soubory, ale jen url adresy, které na disku ve skutečnosti neexistují. Viz odkaz v [#4]
Kubo2
Profil
Je totiž dosť možné (asi sa to aj deje), že stávajúci .htaccess ti namiesto obrázkov podstrkáva stránku /web/index.php?pag=cesta/k-obrazku&lang=obrazky :-)


Zmienenému chovaniu sa dá zabrániť pridaním podmienok

RewriteCond %{REQUEST_URI} -f
RewriteCond %{REQUEST_URI} -d
# prepisovacie pravidlá

pred prepisovacie pravidlo, ako už písal Kajman.
Trax
Profil
Kubo2:
Ano soubor .htaccess mám v odresáři /web

teď jsem to tedy zkusil upravit upravit přesně podle toho, co posílal Kajman

tedy teď mám v .htaccess tohle:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/(.*)$ index.php?as=$2&j=$1 [QSA,L]



Aha, tak já tam asi omylem ještě přidal lomítko před $. Teď už to jde, když ke všem obrázkům a stylům přidám k src či href ../. Je to správně, nebo ještě doporučujete něco doladit? :)
Kubo2
Profil
Trax:
No ak ti to funguje tak je to asi dobre :-)
Trax
Profil
No tak už jsem všechny obrázky i odkazy předělal a funguje to. Bohužel jsem narazil na další zeď, tedy možná dvě zdi.

1. Když si najedu na http://localhost/web/, tak se mi stránka zobrazuje nějak divně a vůbec si nedokážu vysvětlit proč. Vypadá to, jakoby se zobrazovala se soubory o adresář výš tedy jen localhost/

2. Nevím jak pokračovat, když na stránce kontakt - http://localhost/web/cz/kontakt (resp. index.php?pag=kontakt&lang=cz&act=1 ) mám ještě jeden parametr act, který mi určuje, zda byl formulář odeslán. Potřebuju zde taky podstrčit nějakou pěknou url např. cz/kontakt/odeslano.

Jak lze v tomto případě pokračovat? :)
Trax
Profil
No tak, prvně jsem to zkoušel ještě s <base href="" /> ale to jsem posléze zjistil, že by mohlo být problematické u odkazů typu <a href="#top" title="Zpět na začátek stránky">Nahoru</a> atd.
Pak jsem se snažil přijít na to, jak přesně funguje RewriteBase /

Bohužel nemůžu přijít stále na řešení. Nejsem si jist, zda jsem to správně vysvětlil.

kód:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/(.*)$ index.php?as=$2&j=$1 [QSA,L]
mi správně funguje v případě, že ke všem obrázkům a odkazům přidám ../

Fungují potom správně odkazy http://localhost/web/cz/kontakt i např. http://localhost/web/cz/
Nefunguje ale zadání tohle http://localhost/web/cz/kontakt/ a http://localhost/web/cz - píše stránka nenalezena

Hlavní problém, který ale mám je, že když zadám pouze http://localhost/web/ tak styly a obrázky se opět nenačtou.

Je v tomto případě tedy nutné použít např. <base href="http://localhost/web/" /> (nevím, zda v tom není nějaká chyba), nebo se to řeší jinak?
Davex
Profil
Trax:
Jakmile budou v adrese lomítka, tak je bude prohlížeč považovat za adresáře a bude od nich odvozovat i relativní cesty. Místo <base href> se dají ve všech odkazech používat kořenové adresy.

Nefunguje ale zadání tohle http://localhost/web/cz/kontakt/
To by mohla být chyba skriptu, který si neporadí s přebývajícím lomítkem.
Trax
Profil
Davex:
Takže pokud to správně chápu, tak pokud logo leží např. v http://localhost/web/obrazky/logo/logo.png a já mám index v http://localhost/web/index.php, tak pak by mělo stačit mít napsaný obrázek takto: <img src="/obrazky/logo/logo.png"> ?


Ano funguje to, ovšem na localhostu musím potom zadat ještě složku, kde je web umístěn tzn., že obrázek bude zapsán takto: <img src="/web/obrazky/logo/logo.png">
Kdežto na živým serveru bude obrázek zapsán bez oné složky a sice <img src="/obrazky/logo/logo.png">
Jak tedy docílit toho, abych mohl jednoduše testovat web na localhostu bez toho, abych musel vždy přepisovat adresy? Tedy když nepočítám, že si na to napíšu nějaký php skript.
CZghost
Profil
Trax:
Jak tedy docílit toho, abych mohl jednoduše testovat web na localhostu bez toho, abych musel vždy přepisovat adresy? Tedy když nepočítám, že si na to napíšu nějaký php skript.
Virtuální host, nastavíš si ho v PHP MyAdmin na konfigurační stránce localhostu. Zadej si jméno virtuální domény (kdyžtak bez .cz na konci, ať se to kdyžtak nemlátí s existující doménou) a cestu na disku, odkud se budou počítat adresáře. Nepiš si na to žádný skript, tím si to jenom zaprasíš. Domény v podstatě fungujou na takových deklaracích virtuálního serveru. Tam je skript, který vytvoří nový adresář, kde budeš mít web uložen, při přístupu FTP vlastně vstupuješ do toho adresáře, i když se ti to ukáže jako kořen. Výš nemáš pravomoc se dostat, protože tam to nepatří pod tvoje přihlašovací údaje, proto se ti adresář s tvým webem ukáže jako kořen serveru.
Davex
Profil
Trax:
Jak tedy docílit toho, abych mohl jednoduše testovat web na localhostu bez toho, abych musel vždy přepisovat adresy?
Nastavíš si webserver přesně tak, aby se choval jako na hostingu. Viz Apache Virtual hosts - ako na to.

CZghost:
Virtuální host, nastavíš si ho v PHP MyAdmin na konfigurační stránce localhostu.
V phpMyAdmin asi ne, tam si nastaví spíš databázi.
CZghost
Profil
Davex:
V phpMyAdmin asi ne, tam si nastaví spíš databázi.
Já, co používám EasyPHP virtuální server, tak phpMyAdmin mi umožňuje přes konfigurační stránku nastavit virtuální hosty. Takhle jsem si nastavil vývojářské prostředí mého webu.
Trax
Profil
No tak jsem to zkoušel...

Do souboru httpd.conf jsem přidal:

NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1>
    DocumentRoot "C:/PHP/http_docs/000_xy2" 
    ServerName www.xy2.com
    ErrorLog logs/xy2.com-errorlog.log
    CustomLog logs/xy2.com-accesslog.log common
</VirtualHost>

<VirtualHost 127.0.0.1>
    DocumentRoot "C:/PHP/http_docs"
    ServerName localhost
</VirtualHost>

a do souboru hosts jsem přidal:

127.0.0.1       [url=www.xy2.com]www.xy2.com


Používám Complex web server a nevím proč, ale když to poupravuju, tak apache prostě nenaběhne. Mám to špatně napsané nebo může být chyba jinde?


No a teď mi nejde ani localhost
CZghost
Profil
Trax:
Proč to nenastavíš přes prohlížeč? Pochybuju, že tvému virtuálnímu serveru tato možnost chybí. Hledej něco jako localhost/main, případně si zjisti, na jaké adrese se nachází konfigurační stránka. Tam si nastav virtuální host. Když budeš psát přímo do konfiguračních souborů, je větší šance, že něco zmrvíš:
No a teď mi nejde ani localhost
Co jsem říkal. Na webových serverech funguje podobná služba, co ti nabízí mnohé virtuální servery, není jednodušší hledat zlepšovák, než se vrtat v konfiguráku?
Trax
Profil
No abych byl upřímný, v těchto věcech se vůbec nevyznám. Kde to mám tedy hledat? :)
Trax
Profil
A nestačilo by na localu používat jen jinej .htaccess? Mám na mysli s:

RewriteBase /web
CZghost
Profil
Trax:
Kde to mám tedy hledat?
V nápovědě tvého virtuálního serveru. Tam by se mělo psát přibližně „Pro konfiguraci Vašeho virtuálního serveru <Název programu> zadejte do prohlížeče http://localhost/main.“ Název programu by měla být instalace virtuálního serveru (tedy adresář, kde se virtuální server nachází). Adresu najdeš v té nápovědě. Je možné, že sis vybral pokročilý virtuální server, takže tam nemusíš nic takového najít. V tom případě doporučuju změnit server, nejlépe za EasyPHP, můžeš tam nastavovat virtuální hosty i virtuální adresáře, navíc z kteréhokoliv místa na disku. Nechybí správce databází s neomezeným počtem databází (například IC.cz ti dovolí pouze jednu databázi v režimu free). Vše se nastavuje pohodlně přes phpMyAdmin a navíc je vše zdarma, nemusíš platit ani vindru :-) Je to v angličtině, ale předpokládám, že anglicky umíš :-)

Zkus hledat v jazyce tvého serveru, jestli nic nenajdeš, zkus ten EasyPHP, je dobrý :-)
Trax
Profil
CZghost:
Vidím to tak, že rovnou přejdu k EasyPHP
Kubo2
Profil
Trax:
RewriteBase /web
Tato direktíva je určená iba pre rewrite module. Naštuduj si, ako funguje.
Trax
Profil
Kubo2:
Díky. :)

CZghost:
Jak tedy v EasyPHP mohu nastavit virtual server bez toho, abych ručně změnil httpd.conf?
CZghost
Profil
Trax:
Prvně si nainstaluj EasyPHP: http://www.pendriveapps.com/easyphp-portable-wamp-web-server/ Tam je link, který tě zavede na downloady. Vyber si DevServer, pokud chceš testovat. Verzi si ber s ohledem na verzi systému. Verze VC9 má širší podporu, od Windows XP do Windows 8, takže bych doporučil ten. Pokud sázíš na jistotu, že máš nový Windows, tak si vyber druhou verzi, která je jenom pro Windows 7 a 8.

Tady je screenshot administrace. Není z mého počítače, je na stránkách EasyPHP.



Nutno dodat, že virtuální hosty nejsou v základní instalaci. Ty budeš muset doinstalovat. U sekce Modules klikni na recommended modules a vyber Virtual Host Manager (klikni na download and install). Přesměruje tě to na stránku s výběrem modulů. Najeď na Virtual Host Manager a vyber svoji verzi EasyPHP. Ukonči běh programu a nainstaluj modul. Potom znovu spusť a začni přidávat hosty.
« 1 2 »

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: