Autor Zpráva
WonderChild
Profil *
Dobrý den. Mám v plánu udělat si hezké URL - example.com/a odkazuje na example.com/a.php. .htaccess soubor mám a je plně funkční:
#URL Rewrite Engine
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

Takže když zadám URL, odkaze mě to na můj index a ten includne jiný soubor v definované složce. Tady ale nastává problém:
<?php
$template = "template/tplname"
include('.$template' '.$_SERVER['REQUEST_URI]');
?>
Je mi úplně jedno, jak ten kód bude vypadat. Zkousel jsem tu cestu nadefinovat i před "$_SERVER[REQUEST_URI]" Pak jsem tu cestu zkoušel i definovat jako string ale bez úspěchu. Budu si sám vytvářet "templaty" pro tenhle "systém" a dávat je do složky "template" na adrese "example.com/template"
Nikde jsem nemohl najít, jak funguje sytax definování těchto URL, takže kdyby jste měli i odkaz na nějakou příručku, kde mi vysvětli, jak se to správně skládá, budu rád, protože to rozhodne v budoucnosti znovu využiju.
Děkuji a přeji krásný den. :)
WonderChild
Profil *
Pokud bych použil pouze include($_SERVER['REQUEST_URI]'); tak mi to normálně funguje - pokud bych měl soubor a.php v rootu, já ho chci ale mít ve složce templates/tplname/a.php. Opravdu nikdo neví? :/
Keeehi
Profil
include($template . $_SERVER['REQUEST_URI'] . '.php');
Pozor však na to, že takovéto řetězení uživatelem ovlivnitelných vstupů může představovat bezpečnostní riziko.
WonderChild
Profil *
Keeehi:
Pozor.. .php na konci řetězce být nemůže. Server už ví, že si jde pro soubor s příponou .php od htaccess. Tohle by zapříčinilo server žádat o soubor .php.php, což je hloupé. Avšak kód i tak nefunguje. Hází mi to 404. Možná to dělá cache mého telefonu, zkusím, až budu doma.
WonderChild
Profil *
Jinak se omlouvám, do diskuse jsem dal jiný soubor .htaccess. Tenhle je ten správný:
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/index.php
RewriteCond %{REQUEST_URI} !.*\.png$ [NC]
RewriteCond %{REQUEST_URI} !.*\.jpg$ [NC]
RewriteCond %{REQUEST_URI} !.*\.css$ [NC]
RewriteCond %{REQUEST_URI} !.*\.gif$ [NC]
RewriteCond %{REQUEST_URI} !.*\.js$ [NC]
RewriteRule .* /index.php
Server mi ale stále hlásí chybovou hlášku 500 a upravený kód od Keeehiho mi nefunguje. V PHP se vyznám asi jako učitel tělocviku matice, takže vůbec. Děkuju ale za snahu pomoc. Pokud bych to vyresil, napíšu jak.
Keeehi
Profil
WonderChild:
> RewriteRule .* /index.php
To lomítko na 8. řádku tam nejspíše nemá co dělat. Root bude někde jinde, proto ti to hází 404.

Pozor.. .php na konci řetězce být nemůže. Server už ví, že si jde pro soubor s příponou .php od htaccess.
Neví. Od htaccess ví, že má načíst soubor index.php. Ovšem na php příkazy uvnitř toho souboru se pravidla uvedená v htaccess nevztahují. PHP pracuje se soubory tak, jak s nimi pracuje souborový systém. Musíš tedy vždy uvést kompletní cestu. Nemůžeš z ní část vynechat a doufat, že to bude fungovat.
WonderChild
Profil *
Keeehi:
Bohužel.. lomítko tím problémem není.
Vycházel jsem z tohoto článku takže by .htaccess mělo být správně.. ale v tom indexu budu mít někde chybu.. fakt netuším kde. Nejradši bych bral nějaký kurzy PHP a javascriptu, protože to mě ve vývoji stránek -> a naslednemu učení brání. Škola mi ale nedá ten čas. Ve čtvrtém ročníku začneme brát "základy HTML a CSS" což mi nijak nepomůže, to za ty 4 roky mám.. Jo, učím se pomalu. :'D
Aktuální index.php
<?php
$template = "template/tplname"
include($template . $_SERVER['REQUEST_URI'] . '.php');
?>



Keeehi:
Server hází chybu 500. 404 hlásil proto, že jsem laboroval s .htaccess, když jsem si je kopíroval mezi slozkama a subdoménama a nakopiroval jsem ten špatný. :'D Teď tam je ten správný, ale hází to 500


Keeehi:
Bude tam prasárna v tom PHP na 100%, když jsem odstranil string template, přestalo to házet chybu 500. Misto toho jsem ten File path dál před to místo stringu, ale neincludnulo mi to ten soubor. Do souboru jsem si dal texty, třeba jako "já jsem index" "já jsem test v rootu" "jsem ten správnej test" etc... Pomůže mi to poznat, který soubor to pak includnulo, ale neincludnulo mi to nic. :/ Vypsala se mi je. Ta zpráva z indexu samozřejmě. xD ještě by mě zajímalo. Kdybych si nastyloval index.php, je možné includnout jiný soubor (o což se teď snažíme) ale nepřeplácnul by celou stránku ale byl by jen jako content nějakýho DIVu etc? Index.php
<?php
include('templates\tplname' . $_SERVER['REQUEST_URI'] . '.php');
?>
Já jsem index
Keeehi
Profil
1) Pro otestování vyměň include za echo a podívej se, jestli ta cesta vypadá tak, jak by měla. Tato cesta je relativní vůči souboru index.PHP
2) V cestě používej normální lomítko, ne zpětné. To se používá pro escapování.

WonderChild:
je možné includnout jiný soubor (o což se teď snažíme) ale nepřeplácnul by celou stránku ale byl by jen jako content nějakýho DIVu etc?
Ano. Include nic nepřepisuje. Jen vkládá na dané místo. Můžeš si to představit tak, že tam co je include, tak ten se smaže a na jeho místo se vloží obsah souboru ma který odkazoval.
WonderChild
Profil *
Dobře.. nechal jsem si to vypsat a opravil nějaké nesrovnalosti. Také.. root pro PHP asi není stejný, jako pro HTML, že? "/template" a "template" nedefinují stejnou složku. Přitom soubory mám v rootu. Pro lidi, co přijdou na tohle fórum dávám funkční kód:
index.php [pre<?php
include ('template/tplname' . $_SERVER['REQUEST_URI'] . '.html');
?>][/pre]
A funkční .htaccess
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/index.php
RewriteCond %{REQUEST_URI} !.*\.html$ [NC]
RewriteCond %{REQUEST_URI} !.*\.php$ [NC]
RewriteCond %{REQUEST_URI} !.*\.css$ [NC]
RewriteCond %{REQUEST_URI} !.*\.js$ [NC]
RewriteCond %{REQUEST_URI} !.*\.png$ [NC]
RewriteCond %{REQUEST_URI} !.*\.jpg$ [NC]
RewriteCond %{REQUEST_URI} !.*\.gif$ [NC]
RewriteRule .* /index.php
Pokud na serveru budou jiné přípony souborů, je nutné je přidat do .htaccess jinak se automaticky přepíší na nazev_souboru.pripona.html a takový soubor se nemůže includovat, když neexistuje. Každopádně děkuji moc Keeehimu za pomoc a za trápení se s hloupou otázkou a hloupým nováčkem, jako jsem já. Přeji příjemný večer. :)
WonderChild
Profil *
Protože bude problém s zobrazováním obsahu pro nedefinovánou cestu (root dokumentů) tak jsem něco trošku přidal. Takto dopadá finální (zatím) index.php
<?php

/* Change 'default' to folder of your template */
$template = "template/default";

/* !!!DO NOT EDIT CODE UNDER!!! */

/* If URL is root, includes home.php */
$homepage = "/"; $currentpage =  $_SERVER['REQUEST_URI'];
if($homepage==$currentpage) {
include($template . '/home.php');
}

/* Include file depending on URI */
include ($template . $_SERVER['REQUEST_URI'] . '.php');

?>
I jsem si to anglicky popsal, můžete kdokoliv zkopčit, pokud se to někomu bude hodit. :)
Keeehi
Profil
Také.. root pro PHP asi není stejný, jako pro HTML, že? "/template" a "template"
Nejsem si jistý, jak to přesně myslíš ale asi ano. Cesty se počítají v různých prostředích různě.

Přitom soubory mám v rootu.
O tom pochybuji, ale můžeš to jednoduše zjistit. Jaké všechny složky a soubory máš v rootu zjistíš pomocí:
var_dump(glob('/*'));

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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