Autor | Zpráva | ||
---|---|---|---|
WonderChild Profil * |
#1 · Zasláno: 11. 12. 2016, 10:17:27
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]'); ?> 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 * |
#2 · Zasláno: 11. 12. 2016, 12:52:27
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 |
#3 · Zasláno: 11. 12. 2016, 16:20:33
include($template . $_SERVER['REQUEST_URI'] . '.php'); |
||
WonderChild Profil * |
#4 · Zasláno: 11. 12. 2016, 17:02:12
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 * |
#5 · Zasláno: 11. 12. 2016, 18:44:19
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 |
||
Keeehi Profil |
#6 · Zasláno: 11. 12. 2016, 18:57:16
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 * |
#9 · Zasláno: 11. 12. 2016, 21:23:05
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 |
||
WonderChild Profil * |
#10 · Zasláno: 11. 12. 2016, 22:48:30
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'); ?> |
||
Keeehi Profil |
#11 · Zasláno: 12. 12. 2016, 00:11:38
„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('/*')); |
||
Časová prodleva: 8 let
|
0