Autor Zpráva
Matyáš
Profil
Dobrý den,
potřeboval bych poradit s manipulací s URL adresou.

Ve svém projektu bych potřeboval následující věc. Vysvětlím ji na jednoduchém příkladu, abych přítomné nezatěžoval zbytečnými detaily a úskalími mého projektu.
Dejme tomu, že můj projekt má adresu domena.cz.

Potřeboval bych toto: když uživatel zadá adresu domena.cz/en/index.php, zobrazí se mu stránka index.php, která je umístěna v kořenovém adresáři domena.cz, pouze se tento soubor spustí jakoby s parametrem něco="en". Obdobně i s dalšími soubory: domena.cz/en/stranka.php, nebo domena.cz/cs/index.php spustí totožný soubor index.php s nějakým parametrem něco="cs".

Zkrátka abych měl na webu jednu sadu souborů (dejme tomu index.php, stranka.php) a žádné další složky. Zmíněné složky en a cs nebudou fyzicky existovat, budou jakoby nahrazovat GET parametry.
Vím sice, jak by se toto realizovalo, pokud by ony parametry cs a en byly na konci, ale nevím už, jak to provést v tomto případě.

Na závěr zopakuji, že mým cílem není multijazyčný web, pouze jsem to ukázal na tomto jednoduchém příkladu. Složky cs a en jsou smyšlené.

Dá se toto nějak realizovat, aniž bych celý web kopíroval do složek (což je prakticky nerealizovatelné, podložek bude velké množství)?

Předem děkuji všem za reakci!
nodo
Profil
Matyáš:
Toto je hrubý výpis z môjho kódu, malo by ťa to nakopnúť. Treba zabezpečiť proti vstupom užívateľa
$vp = isset($_GET["p"]) ? $_GET["p"] : '';
     
$adresa = explode("/", $vp);
echo $adresa[0];
echo "<br>".$adresa[1];

a do súboru .htaccess zapíš
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L]
Matyáš
Profil
nodo:
Děkuji Vám za Vaši reakci! Zkoušel jsem a funguje to, ovšem ne přímo tak, jak jsem potřeboval. Když například použiji adresu domena.cz/en/jablko.php, tak se mi stejně objeví domena.cz/en/index.php s parametrem $adresa[0]="jablko".
Já bych potřeboval takový .htaccess, který přesměrovává univerzálně na všechny soubory. Pokusím se být více názorný:
domena.cz/ab/index.php přesměrovat na domena.cz/index.php s parametrem parametr="ab"
domena.cz/cd/index.php přesměrovat na domena.cz/index.php s parametrem parametr="cd"
domena.cz/ef/hruska.php přesměrovat na domena.cz/hruska.php s parametrem parametr="ef"
domena.cz/gh/hruska.php přesměrovat na domena.cz/hruska.php s parametrem parametr="gh"
domena.cz/ij/jablko.php přesměrovat na domena.cz/jablko.php s parametrem parametr="ij"
domena.cz/kl/jablko.php přesměrovat na domena.cz/jablko.php s parametrem parametr="kl"
Kajman
Profil
Ale v tom index.php se přeci můžete jednoduše podívat na poslední prvek pole a pokud je to php, otestovat jeho existenci na disku a includovat ho, jinak pokračovat v provádění index.php

Osobně nevidím žádný přínos adresy domena.cz/ab/index.php vůči domena.cz/index.php?parametr=ab
Přínosem přepisu bývá to, že můžete mít adresy nezávislé na technologii - tedy že tam žádné .php v adrese nebude.

Ale jde přepisovat i tak, jak popisujete
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/([^/]*\.php)$ $2?parametr=$1 [QSA,L]
Matyáš
Profil
Kajman:
Děkuji za odpověď. Skript funguje výborně.
Osobně necítím averzi k php GET parametrům v URL, sám je často používám, ovšem, já potřebuji mít ve svém projektu falešné podsložky zákazníků, jejichž adresy jsou ve formě domena.cz/zakaznik/mrkev.php, poněkud přijatelnější.
Tomášeek
Profil
Matyáš:
Profily jsou veřejné (tedy mohu si zobrazit profil jak=hokoliv zákazníka, jehož login znám) nebo jen svůj? Pokud jen svůj (třeba k editaci), pak v URL nic být nemusí.
Matyáš
Profil
Tomášeek:
právě že profily budou veřejné. Ono se v podstatě nebude ani tak jednat o profily, ale spíše o webové portály. Proto usiluji o co nejlepší vzhled adresy.


Ještě bych si dovolil položit jednu otázku, a sice jak by tento kód vypadal v souboru web.config pro IIS?
Matyáš
Profil
Dobrý den,
ještě bych potřeboval poradit s drobnou úpravou souboru .htaccess. Potřebuji, aby na kořenové adrese domena.cz[b][/b] byl obecný web projektu, takže dejme tomu web ze složky /uvod/ a při použití parametru se zobrazil web tvořený soubory ze složky /web/.
Dá se to nějak zařídit? Pokoušel jsem se to googlit, ale moc jsem neuspěl. Nenašel jsem nějaký návod, který by mi pomohl, nebo mě někam popostrčil.
Matyáš
Profil
Kajman:
Přece jen jsem ve Vašem skriptu našel jednu nesrovnalost. A sice když zadám adresu domena.cz/ab do řádky vyhledávače, server vrací stránku 404. Funguje to pouze, pokud uvedu celou adresu, tedy i s názvem souboru domena.cz/ab/index.xxx.
Mohl byste mi naposledy poradit, jak skript pozměnit, aby fungoval i pro tyto případy? Děkuji!

P.S.: jistě uznáte, že uvádět indexovou stránku i s názvem souboru je poněkud nepraktické...
Kajman
Profil
Matyáš:
Mně to spíš přijde jako nesrovnalost v otázce a použití.

Zkuste přidat
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)/?$ index.php?parametr=$1 [QSA,L]

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0