Autor Zpráva
Joan
Profil
Zdravím,
mám dosud statické html stránky a chci, aby se mi automaticky podstrkávaly soubory s příponou php, protože další stránky už budu tvořit v php. Vytvořila jsem si na své placené doméně na serverech Onebitu pokusnou subdoménu a do ní jsem si nakopírovala index.html a další asi tři soubory v html plus CSS. Předtím jsem si samozřejmě aktivovala v administraci svého webového prostoru možnost používání .htaccess.
Poskládala jsem si soubor .htaccess podle různých rad na tuto formu:
RewriteEngine on
RewriteBase / 
RewriteRule ^(.*)\.html$ http://www.pokusne.example.cz/$1.php/ [QSA]


a dospěla jsem k překvapivým výsledkům:
jakmile jsem do složky se subdoménou, hned vedle těch html souborů, nakopírovala .htaccess (vidím ho ve FireFTP zašedlý), od toho okamžiku naskočil Error 404. Po smazání .htaccess se prezentace zase obnovila. Zkoušela jsem místo hvězdičky v regulárním výrazu vložit plusko, úplně nakonec za .php dát lomítko, napsat přímo absolutní adresu (absolutní adresa se prý musí vložit vždy při redirectu, např. s R=301, kvůli jakémusi loadbalanceru) ale nic z toho mi neobnovilo prezentaci.
Je zajímavé, že po ručním nadatlování www.pokusne.example.cz se do adresy přilepilo index.php za současného zobrazení Error 404.

Napadlo mě do složky vkopírovat i soubor index.php a znova ručně napsat www.pokusne.example.cz. To už se úvodní stránka zobrazila, ovšem bez stylů (bez .htaccess se zobrazovaly i styly). A při klikání na odkazy na stránky, které jsem do pokusné složky taky vkopírovala, se do adresního řádku přidávaly, takže jsem se nakonec dopracovala k neskutečné adrese www.pokusne.example.cz/index.php/odkaz1.php/odkaz2.php/odkaz3.php.../

Máte prosím někdo tušení, jak z toho ven?
Davex
Profil
Tato varianta nebude podstrkávat, ale přesměrovává (protože je jako cíl absolutní adresa). Podstrčení PHP skriptů by mělo vypadat nějak takto:
RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.html$ $1.php [L]
Joan
Profil
Davex:
No super, pokusné stránky naskočily! Moc Ti děkuju!
Takže - když další stránky budu přidávat už ve tvaru stranka.php tak se bude normálně zobrazovat? Je mi fuk s jakou příponou, hlavně aby se zobrazila.

Jinak pro mě škoda, že v tomto mém vláknu se vůbec nikdo nezmínil o potřebě podmínky
RewriteCond %{REQUEST_FILENAME} !-f
...
Davex
Profil
Tato podmínka zajistí, že když nebude existovat soubor stranka.html, tak se podstrčí skript stranka.php. Není nezbytně nutná - doplnil jsem jí jen z důvodu zajištění funkčnosti původního webu ze statických stránek.
Joan
Profil
Davex:
Jenže bez této podmínky mi to házelo Error 404! Původně jsem samozřejmě taky zkoušela
RewriteRule ^(.+)\.html$ /$1.php
akorát s [QSA] místo [L] na konci, ale okamžitě naskočila chybová stránka. Takže ji tam mít nutně musím.
Nejhlavnější pro mě je, že to funguje :-)
Dobrou noc.

EDIT: Tak nevím, jestli to opravdu dělá to, co jsem chtěla...
Všechny .html soubory jsem musela přeuložit jako .php, protože jsem do nich includovala menu a patičku. Po vložení .htaccess do adresáře k souborům v .php se sice stránky bez problémů otevírají, ale mají příponu .php což je logické, jelikož v tomto formátu jsem je přeuložila.
Ovšem vzhledem k tomu, že někdo může mít moje stránky uložené v .html (ostatně indexovací robot taky) tak se na web už nedostane! Zkoušela jsem na localhostu přepsat příponu php na html a zobrazila se implicitní chybová stránka o nenalezení (že z neznámého důvodu nefunguje moje vlastní, je teď prozatím vedlejší).
Moje přání bylo, aby se soubory zobrazovaly jako původní .html a ve skutečnosti byly v .php
Jde toto prosím nějak ošetřit? Nebo jsem se do toho zamotala? Moc děkuji předem.
Davex
Profil
Joan:
Moje přání bylo, aby se soubory zobrazovaly jako původní .html a ve skutečnosti byly v .php
Toto přání by mělo přesně zajišťovat pravidlo z [#2], pokud se tak neděje, tak je problém ještě v něčem jiném. Možná jen prohlížeč nakešoval chybovou stránku z předchozích pokusů - zkus .html stránku obnovit pomocí klávesy F5 nebo kombinací Ctrl+F5.
Joan
Profil
Davex:
Vše zatím testuji na localhostu bez připojení k netu a je to fakt zvláštní:
- když jsem testovala v ComplexWebServeru (CWS), tak při přepsání koncovky v adresním řádku ze skutečného php na imaginární html implicitní chybová stránka zobrazila, že nemůže najít soubor.html který tam fyzicky nebyl.
- vypnula jsem běžící CWS a nainstalovala WAMPserver 2.0i.exe který je mi mimochodem mnohem sympatičtější než CWS. V httpd.conf byl již defaultně odkomentovaný řádek pod <Directory "c:/wamp/www/"> na AllowOverride all. Ve WAMPu po přepsání koncovky php na html mi opět implicitní chybová stránka zobrazila že pro změnu nemůže najít soubor.php který tam dokonce fyzicky skutečně je! Všechny soubory mám už v php...
Používám k testům offline FF 3.0.10. Mám spíš podezření, že .htaccess nemá ty správné vlastnosti a povolení, protože mi ani ve WAMPu ani v CWS nejede vlastní chybová stránka (ani v html, ani v php) s textem
ErrorDocument 404 /chybovka.php
a soubor chybovka.php i chybovka.html v adresáři spolu s .htaccess skutečně mám.
Všechna Důvěrná data mažu ve FF co chvíli a refreshuji přes Ctrl+F5 a nějak už nevím, čeho se chytit... :-(

Ještě jeden poznatek: když v adresním řádku změním skutečně existující soubor v php na jiný (taky v php, třeba přidám písmenko), tak se v defaultní chybové stránce objeví navíc text:
Additionally, a 404 Not Founderror was encountered whila trying to use an ErrorDocument to handle the reguest.

Znamená to snad, že se obě chybové stránky navzájem "tlučou"?

EDIT: nepomohlo ani vygooglená změna
RewriteCond %{REQUEST_FILENAME} !-f

na
RewriteCond %{REQUEST_URI} ^(.*).html

.....................................................................................

Šmarjápano! Já jsem .htaccess jen přesunula z adresáře s obsahem webu o úroveň vejš, tj. přímo do složky c:\wamp\www a už mi to přepis php na html žere! Uf, tady byl zřejmě zakopaný pes, já měla za to, že musí být hned vedle souborů, na něž se má aplikovat, ne ještě o úroveň výš. Stejně tak jsem zkusila přesunout do adresáře www soubor chybovka.php a už jede!

Pěkný víkend :-)
Davex
Profil
Joan:
já měla za to, že musí být hned vedle souborů, na něž se má aplikovat, ne ještě o úroveň výš
Klidně může být přímo u těch souborů, ale v .htaccess se musí adresář zohlednit ve všech cestách a zadávat je absolutně ke kořeni webu:
RewriteBase /mujadresar/
ErrorDocument 404 /mujadresar/chybovka.php
bohyn
Profil
Místo toho bych doporučil nakonfigurovat virtual hosty, takhle se to po přesunu na web zase všechno robije.
Joan
Profil
Hezký večer.
Tak jsem to vyzkoušela na pokusné subdoméně, kterou jsem si vytvořila nejen pro tohle a nazvala jsem si ji "psi-kusy" a rozložení složek je takovéto:



Když jsem .htaccess s tímto obsahem
RewriteEngine on
RewriteBase /www/psi-kusy

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.html$ $1.php [L]

nahrála dovnitř složky www.psi-kusy tak mi nefungoval ruční přepis html na php v adrese takže pouhé přidání za lomítko u RewriteBase jména adresáře psi-kusy ani www.psi-kusy ani www/psi-kusy je nepoužitelné...
Do hlavní složky s názvem www tento .htaccess šoupnout nemohu protože tam mám hlavní prezentaci a tam chci aby platil jiný .htaccess.
Poradíte prosím jak jej upravit aby fungoval jen a pouze pro složku www.psi-kusy? Výše uvedená rada s připsáním adresáře opravdu nepomohla nebo jsem ji špatně použila.
Díky předem!
Davex
Profil
Správně by měla být cesta z pohledu URL a ne souborového systému, takže by to mělo být takto:
# URL: http://www.example.com/www.psi-kusy/stranka.html
RewriteBase /www.psi-kusy

# URL: http://www.psi-kusy.example.com/stranka.html
RewriteBase /

Vyber si jednu z variant, která nejvíce odpovídá tvému použití a soubor .htaccess s touto volbou umísti do adresáře, kde chceš adresy přepisovat.

Pokud testuješ na localhostu víc webů, tak by byly lepší VirtualHosty, jak píše bohyn, aby se pravidla nemusela měnit před uploadem na server.
Joan
Profil
Paráda, funguje to!! Na localhostu je to zřejmě trošku jinak poskládané, na skutečném webu opravdu postačí nasoukat .htaccess přímo do složky s obsahem. Nyní mi přepis php na html šlape jak jsem chtěla.
Moc děkuji!

P.S.: Na ty VirtualHosty jsem si hned něco vygooglila, ale připadá mi to dost složité. No, budu se namáhat dál :-)
Davex
Profil
Přesně při této konfiguraci (.htaccess + soubory .php) by to mělo fungovat. Z nějakého důvodu nefunguje mod_rewrite na hostingu podle očekávání. Onebit neznám, takže mě příčina nenapadá - možná to mají popsáno na http://www.onehelp.cz/onebit/kb/faq-nefunguji-prepisovaci-pravidla-mod_rewrite, ale nepustí mě tam.

Tak už nic :-)
Joan
Profil
Davex:
Přiznávám, že důležitý zádrhel nastal mezi klávesnicí a židlí: vše jsem měla správně nastavené, jen jsem si pozdě uvědomila, že jsem jaksi zapomněla nahrát soubory v php místo html... totiž na cestovním noťasu v localhostu ano, ale na počítači s internetem už ne. Moje chyba a díky za Tvůj čas :-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0