Autor Zpráva
TomasRe
Profil
Dobrý den,

mám problém s přepsáním URL. Chtěl bych, aby se zobrazovalo domena.cz/stranka místo domena.cz/stranka.php. To lze vytvořit:

RewriteEngine on
RewriteRule ^stranka$ %{DOCUMENT_ROOT}/stranka.php [L]

ale když napíšu do vyhledávače ručně "stranka.php", tak se již samozřejmě nepřepíše na "stranka".

Proto jsem zkoušel dodat řádek:

RewriteRule domena.cz/stranka\.php domena.cz/stranka [R=301]

ale bohužel mi přijde, že tento řádek vůbec nevnímá. I kdybych přepsal všechny URL na stránkách, tak stejně budou odkazy z jiných webu zobrazovat na konci .php. Nehledě na to, že kdybych se to dalo takto upravit, nemusel bych v celém webu přepisovat odkazy.

Nevíte prosím někdo, jak to ošetřit?
Kajman_
Profil *
http://latrine.dgx.cz/hadanka-znate-mod_rewrite
TomasRe
Profil
Kajman:
Řešení funguje elegantně, ale pouze do doby, než se mi v rootu nějaké php jemnuje stejně jako adresář a řešení s formulářem mi nefunguje vůbec...
Kajman_
Profil *
se mi v rootu nějaké php jemnuje stejně jako adresář
http://diskuse.jakpsatweb.cz/?action=vthread&forum=31&topic=113947&page=0#2

řešení s formulářem mi nefunguje vůbec...
A používáte tam nové adresy? Při odeslání přes post se při 301 data nepředají.
http://latrine.dgx.cz/hadanka-znate-mod_rewrite#comment-8917
TomasRe
Profil
Kajman:
Vím, že všichni píšou, že jim to funguje, proto nechápu, proč mně ne…

se mi v rootu nějaké php jemnuje stejně jako adresář
http://diskuse.jakpsatweb.cz/?action=vthread&forum=31&topic=113947&page=0#2

Jakmile to tam vložím, tak mi celý web hází chybu 500

řešení s formulářem mi nefunguje vůbec…
A používáte tam nové adresy? Při odeslání přes post se při 301 data nepředají.
http://latrine.dgx.cz/hadanka-znate-mod_rewrite#comment-8917

používám post, ale to je samé jako ten příklad před tím - hází chybu 500, jediné co "funguje" - problém s názvem (adresář = soubor) a problém s odesíláním.

"Funguje":

RewriteEngine On
RewriteBase /

# exists file with extension?
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L]


# redirect, but only once
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]

Ale jakmile tam přidám řádek - RewriteCond %{REQUEST_MET HOD} GET, tedy:

RewriteEngine On
RewriteBase /

# exists file with extension?
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L]
RewriteCond %{REQUEST_MET HOD} GET

# redirect, but only once
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]

hned to hodí chybu 500 a stránky se nezobrazí, stejně pak je to s řádkem: DirectorySlash Off

Nedokážu si to vysvětlit…

Moderátor Davex: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Kajman_
Profil *
Ale jakmile tam přidám řádek - RewriteCond %{REQUEST_MET HOD} GET

A kde jste přišel k té mezeře uvnitř method? Když ji tam nevyrobíte, tak to také zlobí?
TomasRe
Profil
Kajman:
To se musím stydět, tak to odesílání funguje... Ale bohužel se tím ještě nevyřešil problém s názvem adresáře...
Kajman_
Profil *
A jaký je to vlastně problém? Jak se nefungování projevuje? Co je v chybovém logu apache? Co je v rewrite logu? Je na serveru zapnutý modul mod_dir?
TomasRe
Profil
Kajman:
Problém nastane, když mám v rootu soubor např. pokus.php a pak adresář pokus, který obsahuje další (jiné) soubory. To jsem vytvářel, aby byla cesta "estetická" - doména/pokus.php - při pokračování by pak byla URL doména/pokus/nahled.php. .htaccess nyní vypadá:

ErrorDocument 403 http://www.domena/working.php
ErrorDocument 404 http://www.domena/working.php

RewriteEngine On
RewriteBase /

# exists file with extension?
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L]
RewriteCond %{REQUEST_METHOD} GET 


# redirect, but only once
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]

RewriteCond %{HTTP_HOST} ^domena
RewriteRule (.*) http://www.domena/$1 [R=301,QSA,L]

Bohužel v tomhle se moc (téměř vůbec) nevyznám, takže opravdu nevím, jak zapnout modul mod_dir. A doména je na pipni.cz, takže se k logům nedostanu…
Davex
Profil
TomasRe:
Problém nastane, když mám v rootu soubor např. pokus.php a pak adresář pokus, který obsahuje další (jiné) soubory.
Zopakuji a doplním Kajmanovu otázku: za jakých podmínek a jak se ten problém projevuje? Počítač udělá pápá?
TomasRe
Profil
Davex:
Při použití .htaccess:

RewriteEngine On
RewriteBase /

# exists file with extension?
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L]
RewriteCond %{REQUEST_METHOD} GET 

# redirect, but only once
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]


mám v rootu soubor se stejným názvem jako složka - tzn. např. je v rootu složka "pokus" obsahující stránky php a vedle (také v rootu) je soubor pokus.php. Jakmile použiji tento .htaccess, místo toho, aby se při kliku otevřela stránka doména/pokus.php (měla by se tedy zobrazit URL doména/pokus) se zobrazí chyba 403 Forbidden. Jediné vysvětlení si beru, že zkusí otevřít doména/pokus - ale chce otevřít složku pokus.

A když tam zkusím vložit řádek:

DirectorySlash Off


tak se neotevře žádná stránka - tedy otevře se stránka s chybou 500.
Davex
Profil
TomasRe:
Aby se nezobrazil obsah existujícího adresáře (tobě se zobrazí chyba 403, protože není výpis souborů povolen), tak je nutné vypnout doplňování lomítka pomocí konfigurační volby DirectorySlash Off. Pokud její přídání do souboru .htaccess způsobí chybu 500, tak není toto nastavení v souboru .htaccess správcem webového serveru povoleno. Asi bude nutné požádat podporu hostingu, aby provedli změnu přímo v konfiguraci Apache.
TomasRe
Profil
Davex:
Aha, moc děkuji za vysvětlení. Požádám tedy pipni.cz, aby povolili úpravu v .htaccess DirectorySlash Off. Ještě jednou moc děkuji.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0