Autor Zpráva
worda
Profil *
Dobrý den,

zkusil jsem nakonfigurovat .htaccess soubor, tak aby převáděl odkazy takto:
/prihlaseni.php ->/prihlaseni
/info/oNas.php ->/info/oNas
/detail.php?kod=K19G7D6 ->/produkt/K19G7D6

.htaccess:
RewriteEngine On
RewriteBase /

ErrorDocument 404 /404.php

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]

RewriteRule ^produkt/([_a-zA-Z0-9\-]+)/?$ detail.php?kod=$1 [L,QSA]

RewriteRule ^info/([_a-zA-Z0-9\-]+)/?$ info/$1.php [L,QSA]

RewriteRule ^([_a-zA-Z0-9\-]+)/?$ $1.php [L,QSA]

Poslední 2 pravidla se zdají být funkční ovšem to první nikoliv, s .htacces nemám takové zkušenosti a tak je pro mě složité identifikovat chybu, můžete mi někdo poradit s řešením? Děkuji
Davex
Profil
Zdá se, že to funguje jak má. Nefunkčnost se projevuje jak?
worda
Profil *
Po zadání zadání stránky například:
http://www.mujweb.cz/produkt/K19G7D6

to vychodí 404 chybu:
Not Found

The requested URL /subdom/www/produkt/K19G7D6 was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Davex
Profil
Kde se tam objevilo to /subdom/www/? Nejsou tam nějaká další pravidla se kterými by to mohlo kolidovat?
worda
Profil *
To to nejspíše umístění stránek na hostingu. Jiná htaccess pravidla tam nejsou, jen tento jeden soubor. Zkoušel jsem změnit i RewriteBase na /subdom/www/ ovšem to také nepomohlo.
Davex
Profil
V pravidlech problém nevidím a tato kombinace by měla fungovat na 99 % webserverů s Apache.

Ve skutečnosti nemusí fungovat ani pravidla 2 a 3, ale stránky načtou jiným způsobem pomocí mod_negotiation. Zkus si to vypnout volbou Options -MultiViews a možná se přestanou načítat i stránky na adresách obsluhovaných pravidly 2 a 3.
worda
Profil *
Tak se omlouvám, ono to není umístěný přímo v rootu, je to hosting wedosu, takže struktura je:
/www/subdom/www/
a v /www/ je soubor .htaccess, který obsahue následující:
RewriteEngine On

# cele domeny (aliasy)
RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) domains/%2/$1 [DPI]

# subdomeny (s nebo bez www na zacatku)
RewriteCond %{REQUEST_URI} !^subdom/
RewriteCond %{REQUEST_URI} !^/subdom/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdom/%2 -d

# aliasy - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^domains/[^/]+/(.+[^/])$ /$1/ [R]

# subdomeny - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdom/[^/]+/(.+[^/])$ /$1/ [R]

Takže má ty pravidla vložit do tohohle souboru? ale v jakém tvaru?
Davex
Profil
Soubor /www/.htaccess by měl zůstat tak jak je a pravidla pro přepis adres z [#1] by se asi měla dát do souboru /www/subdom/www/.htaccess.
Kajman
Profil
worda:

Přijde mi, že za řádkem 14 chybí rewriterule.
worda
Profil *
Přihlásím se na ftp, a mám tam www, session a tmp složky. Pokud vlezu do www, tak tam je ten soubor .htacces o kterém jsem psal v předchožím příspěvku a pak je podsložku subdom a další podsložku www a tam je umístěn obsah stránek.

Davex
Pokud Tě chápu dobře, tak to tak bylo původně a nefungovalo to (resp mi to furt házelo 404).
polonium
Profil
A skousel jsi nastavit RewriteBase na /subdom/www nebo ho zakomentovat?
worda
Profil *
Kajman:
Přijde mi, že za řádkem 14 chybí rewriterule.
Máš pravdu, nevím jak to mohlo vypadnout, kopíroval jsem celý ten soubor /www/.htaccess

opravené:
RewriteEngine On

RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) domains/%2/$1 [DPI]

RewriteCond %{REQUEST_URI} !^subdom/
RewriteCond %{REQUEST_URI} !^/subdom/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdom/%2 -d
RewriteRule (.*) subdom/%2/$1 [DPI]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^domains/[^/]+/(.+[^/])$ /$1/ [R]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdom/[^/]+/(.+[^/])$ /$1/ [R]

Web je umístěn ve složce /www/subdom/www ->tam jsem umístil svůj .htaccess:
RewriteEngine On

ErrorDocument 404 /404.php

RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]

RewriteRule ^produkt/([_a-zA-Z0-9\-]+)/?$ detail.php?kod=$1 [L,QSA]

RewriteRule ^info/([_a-zA-Z0-9\-]+)/?$ info/$1.php [L,QSA]

RewriteRule ^([_a-zA-Z0-9\-]+)/?$ $1.php [L,QSA]
RewriteBase jsem zkusil smazat i nastavit na RewriteBase /subdom/www/ ->beze změny
a stále stjený problém, už jsem z toho zoufalý :-(.


Nejspíše to již funguje, problém byl v tom, že to nebralo v adrese parametr, který obsahoval více slov a nebyl nijak spojen (např pomlčkou). Díky
Kajman
Profil
Ale /produkt/K19G7D6 neobsahuje více slov, je divné, že to nefungovalo.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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