Autor Zpráva
Taurus
Profil
Dobrého večera,
mohl bych poprosit o okomentování několika řádků? Zdá se, že fungují, ale nevím, jestli si něco nevykládám špatně.
#chybova stranka
ErrorDocument 404 /error404.php

#odstraneni duplicity bez www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^odemne.com
RewriteRule (.*) http://www.odemne.com/$1 [R=301,QSA,L]

#odstraneni index.htm, index.html, index.php
RewriteRule ^(.+/)?index\.(html?|php)$ /$1 [R=301,NC,NE,L]

#v pripade neuvedeni koncovky .php ji pridej (pouze ve slozce /tvorba, /zapisky, /kontakt)
RewriteCond %{REQUEST_FILENAME} -f [NC,OR]
RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule .* - [L]
RewriteRule ^((tvorba|zapisky|kontakt)/[\w-]+)$ /$1.php [L,QSA]

Můžu vyhodit [QSA], když na stránkách nepoužívám odkazy typu stranka.html?id=pet?
Ad poslední část: značí -f a -d linuxácké soubory a složky? Jsou vůbec tyto dva řádky + následující k něčemu, když po jejich odstranění nevidím rozdíl? Neošetřuje to třeba znehodnocení složek koncovkou .php nebo tak něco?

Cílem bylo, abych mohl odkazovat bez .php, ale fungovalo i s .php (funguje obojí). Ještě lepší by bylo, aby se .php přesměrovalo na bez .php (i kvůli duplicitám), ale to jsem nesvedl. Šlo by nějak upravit? (Plánuju změnit odkazy v html, ale přijde mi to jen jako obcházení problému, protože pořád by fungovaly i stránky s .php.)

Chybí mi ještě něco podstatného, co vyřešit?

Čerpal jsem odsud:
www.jakpsatweb.cz/server/mod-rewrite.html
http://htaccess.all4all.cz/funkce.php

Díky za pomoc.
Kajman_
Profil *
QSA můžeš vyhodit, ono se stejně dělá samo, pokud v nové adrese není otazník.

NC u řádků 13 a 14 zase asi nemá význam na serverech, kde je linux - tam na velikosti písmen záleží. Ty tři řádky 13-15 říkají, pokud to je soubor (-f) nebo adresář (-d) tak nic nepřepisuj a skonči. Ale pro potřeby přesměrování z existující .php adresy na verzi bez ní, se tahle pravidla stejně nehodí a nedošlo by k tomu.

A u toho posledního bych se inspiroval v hádance.

# podstrneni php, pokud opravdu takovy .php soubor existuje
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^((tvorba|zapisky|kontakt)/[\w-]+)$ $1.php [L]

# presmerovani na verzi bez php, pokud neni vnitrne prepsano a neni to post pozadavek
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_MET­HOD} GET
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^((tvorba|zapisky|kontakt)/[\w-]+)\.php$ $1 [L,R=301,NE]


A pro testování je lepší používat status 302 a až po odladění pravidel tam dát 301.
Taurus
Profil
Děkuju moc za řešení a odkaz.

Sedmý řádek jsem zkusil odstranit, protože jinak mi přesměrování nefungovalo. Odesílací formulář mail.php běží (možná je napsaný tak, že to nijak neovlivňuje, nevím). Přesto díky, že sis ho všiml a zohledňoval ho, této věci jsem se totiž taky bál.

301 jsem si asi trochu zavařil. Ve Firefoxu jsem snad jen na dobu neurčito odvařil nejnovější zápisek i když v Chrome není problém (kde jsem původně netestoval). Mazání cache zatím nepomohlo, možná příští indexace Google, možná pletu páté přes deváté…

Měl jsem téma pojmenovat spíš jako „Přesměrování na adresu bez .php“.

Moderátor panther: Přejmenováno.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0