Autor Zpráva
Kubík M.
Profil *
Zdravim,

rád bych, kdyby mi někdo poradil, jak vyřešit menší problém. Potřebuji, abych na localhostu mohl vyvíjet stejnou verzi jako budu nahrávat na ostrý server. Jediný problém jsem ale nalezl v souboru .htaccess

Nejdříve ještě vysvětlím, jak to vypadá u mě:

Mám standardní WAMPSERVER2 uložen v C:// - wamp / www.
Ale ve složce www mám ještě několik podsložek, které jsou jako jednotlivé projekty, ke kterým přistupuji tedy pomocí podsložek:
localhost/projekt1/
localhost/projekt2/
apod...

Doufám, že je jasné co tím myslím...

Jeho podoba je takováto:

RewriteEngine on
DirectoryIndex index.php

RewriteRule ^menu/(.*)/$ index.php?menu=$1


Funguje sice správně a plní to co má, jenže...

Na ostatní stránky odkazuji pomocí standardního odkazu ve formátu:
<p>Chci jít na <a href="/menu/kontakt/">kontakt</a>.

Ovšem problém nastane tehdy, když kliknu na odkaz například z úvodní stránky.
Rewrite sice přepíše adresu a poslal by mi soubor kontakt.php, ale nenajde cestu, protože se /menu/kontakt/
bere od kořenového souboru, nikoliv od podsložky, kde mám můj projekt.

zkoušel jsem i metodu
<p>Chci jít na <a href="menu/kontakt/">kontakt</a>.
ale výsledek je takový, že funguje první odkázání a potom se na sebe odkazy lepí
tudiž vzniká localhost/project/menu/kontakt/menu/uvod/menu/dalsi-stranka/... apod...


Nenapadá Vás nějaké řešení krom toho mít vždy na localhostu pouze jeden soubor nebo to mapovat přes hosts na falešené domény?

Díky, snad jste mě pochopili.
Davex
Profil
Nejsnadnější řešení je vytvořit si pro každý projekt samostatnou subdoménu a VirtualHost (to asi myslíš tou falešnou doménou).

Jiná řešení jsou zbytečně komlikovaná a mohla by přinášet komplikace po nasazení odladěných skriptů do provozu (třeba HTML element <base>).
Kubík M.
Profil *
Nebo mě napadlo prostě ke všem odkazům dávat ještě /project/menu/kontakt a nebo misto toho proměnnou, kterou v hlavním souboru případně zrušit, co myslíš?

$path = "/project";
echo("<a href='$path/menu/uvod'>");

a při nahrání na ostrý server prostě jen proměnnou $path nastavit na prázdnou hodnotu.
Davex
Profil
Kubík M.:
Ano. Skript by neměl být závislý na umístění v adresářové struktuře a měl by být schopen zjistit si umístění sám - v PHP například z proměnné $_SERVER['PHP_SELF']. Stačí si vytvořit konfigurační skript, který nastaví konstantu dostupnou ve všech skriptech. To ale s konfigurací serveru nesouvisí, takže jsem se o tom nezmiňoval.
Kubík M.
Profil *
No pokud budu předpokládat, že výjdu z .htaccess je nemožné se dostat dál jak na /menu/stranka/ např. na /menu/stranka/jeste-neco/. Takže by $path = "/project"; mělo stačit, ale ted je otazka, co kdyz dal se budou delat veci jako mazani, apod. $_SERVER['PHP_SELF'] mi to neobstará...
Davex
Profil
Kubík M.:
To je záležitost aplikační logiky. Umístění skriptu v adresáři je absolutně nepodstatný detail.
Kubík M.
Profil *
Nerozumím.

Přejdu-li k řešení - měla by stačit daná proměnná s případně přidáním ../../../ ?
Davex
Profil
V té proměnné je jméno volaného skriptu s cestou od kořene webu. Samotná cesta se dá vytáhnout funkcí dirname().
Kubík M.
Profil *
No jasně, staré zlaté dirname(). To by mohlo jít. :-) Dík

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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