Autor Zpráva
wordik
Profil *
Při zpracování BB značek došlo k samovolnému sežrání celého příspěvku. Pardon.
Dobrý den,

Dočetl jsem, že se špatně nastavená rewrite pravila a hlavně pravidla ve větším množstvím mohou značně ovlivnit rychlost načítání stránek, která není bůh ví jaká. Vím že tento .htaccess soubor je asi prasárna, ale při jeho tvorbě jsem se to snažil zjednodušit, především tu střední část, ovšem nepodařilo se mi to nastavit tak, abych zachoval funkčnost. Mohl bych tedy poprosit nějakého odborníka, aby se na tyto pravidla podíval a poradil, jak je mohu zjednodušit? Děkuji předem za pomoc.

[pre]
RewriteEngine On
RewriteBase /

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

# faktura
RewriteRule moje-objednavky/([_a-zA-Z0-9\-]+)/faktura?$ shared/resources/scripts/php/invoice.php?v1=$1 [L,QSA]

# newsletter
RewriteRule newsletter/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]

# ################## VYHLEDÁVÁNÍ
# vyhledávání filtry
# vyhledávání filtr 6.
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5&v6=$6&v7=$7 [L,QSA]

# vyhledávání filtr 5.
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5&v6=$6 [L,QSA]

# vyhledávání filtr 4.
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5 [L,QSA]

# vyhledávání filtr 3.
# zboží na stránku
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
# zobrazení
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
# řazení
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
# značka
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]

# vyhledávání filtr 2.
# zboží na stránku
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
# zobrazení
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
# řazení
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
# značka
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
# barva
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]

# vyhledávání filtr 1.
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zbozi-na-stranku/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/zobrazeni/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/razeni/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/znacka/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/barva/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2 [L,QSA]
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/strana/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2 [L,QSA]

# vyhledávání
RewriteRule vyhledavani/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1 [L,QSA]
# ################## VYHLEDÁVÁNÍ

# ################## PODKATEGORIE 1 / PODKATEGORIE 2 - FILTRY
# podkategorie 2 3.filtr
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5&v6=$6 [L,QSA]
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5&v6=$6 [L,QSA]
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5&v6=$6 [L,QSA]
# podkategorie 2 2.filtr + podkategorie 1 3.filtr
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5 [L,QSA]
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5 [L,QSA]
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5 [L,QSA]
# podkategorie 2 1.filtr + podkategorie 1 1. a 2.filtr
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
# ################## PODKATEGORIE 1 / PODKATEGORIE 2 - FILTRY

# ################## PODKATEGORIE 2
# ### podkategorie 2 + detail zboží
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/zbozi/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4&v5=$5 [L,QSA]
# ### podkategorie 2
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
# ################## PODKATEGORIE 2

# ################## PODKATEGORIE 1
# ### podkategorie 1 + detail zboží
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/zbozi/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3&v4=$4 [L,QSA]
# ### podkategorie 1
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2 [L,QSA]
# ################## PODKATEGORIE 1

# ################## KATEGORIE
# ### kategorie + detail zboží
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/zbozi/([_a-zA-Z0-9\-]+)/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1&v2=$2&v3=$3 [L,QSA]
# ### kategorie
RewriteRule kategorie/([_a-zA-Z0-9\-]+)/?$ index.php?v1=$1 [L,QSA]
Davex
Profil
Řešení některých častějších problémů (FAQ) » Univerzální obecné pravidlo
wordik
Profil *
To vypadá dobře, jenže já teď například využívám url ve tvaru:
domena.cz/vyhledavani/blablabla

s tím že vyhledavani neni parametr, to bych musel celý zdrojový kód předělat, takových případů tam tam více.

No ale pokud není jiné řešení, pak mi asi nic jiného nezbývá.
wordik
Profil *
Tak jsem se k tomu po delší době konečně dostal. Váš tip na řešení je super a vypadá to funčně, akorát jsme narazil na chybu, kterou si nedokážu vysvětlit a už mi to hlava asi 2 hodiny nebere. Pozn.: Z využítím předchozích rewrite pravidel viz první příspěvek vše fungovalo.

můj .htaccess vypadá nyní následovně:
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

do php jsem přidal:
$url = explode('/', $_GET['url']);
$_GET['v1'] = $url[0];
$_GET['v2'] = $url[1];
$_GET['v3'] = $url[2];
$_GET['v4'] = $url[3];

A nyní k mému problému, mám kód, který podle URL změní uživateli heslo.

aktivační odkaz:
http://www.mujweb.cz/zapomenute-heslo/potvrdit/464f29728761ddaa45c7311cc83ff532ac35c0e0/8m8TpT4f13F

Nové heslo: f9be0f0e
$existCheckQuery = mysql_query('SELECT `active` FROM `'.$mysql['database'].'`.`registered_users` WHERE `hash` = "'.mysql_real_escape_string($_GET['v3']).'" LIMIT 1');
$active = mysql_fetch_assoc($existCheckQuery);
if (mysql_num_rows($existCheckQuery) == 1 && $active['active'] == 1) {
    mysql_query('UPDATE `'.$mysql['database'].'`.`registered_users` SET `password` = "'.SHA1(base62decode(mysql_real_escape_string($_GET['v4']))).'" WHERE `hash` = "'.mysql_real_escape_string($_GET['v3']).'" LIMIT 1');
echo 'Nové heslo: <span class="bold">',base62decode(mysql_real_escape_string($_GET['v4'])),'</span> bylo úspěšně aktivováno.';
} else {
    echo 'Zadaný uživatelský účet doposud nebyl aktivovaný.';
}

Vše proběhne OK, vypíše to, že heslo f9be0f0e bylo nastaveno (tudíž heslo z URL správně dekoduje), ale když se podívám do databáze, tak SHA1 hash je jiný, než když heslo nastavím SHA1 manuálně v databázi.
Chyba musí být v tom mod_rewrite, když vrátím zpátky ta pravidla, funguje to.

Takže mě napadlo, nemůže tam být nějaký neviditelný znak, který se zaheshuje pomocí SHA1 spolu s heslem?
Kajman
Profil
Při ukládání by měla být funkce mysql_real_escape_string použita až na výsledek SHA1(base62decode($_GET['v4'])). Ale nejsem si jistý, zda to způsobuje onen problém. Navíc pro escapování dat do html se nepoužívá mysql_real_escape_string ale htmlspecialchars, viz http://phpfashion.com/escapovani-definitivni-prirucka

Také je dobré heslo před hashováním osolit a přijde mi bezpečnější náhodné heslo vygenerovat až při potvrzení, než ho mít v url posílané e-mailem. A nezapomeňte si při změně hesla změnit i stav sloupce hash.
wordik
Profil *
Děkuji za vaše postřehy, vím, že ten skript není dokonalý, ovšem bohužel to nezpůsobuje můj problém, když dříve to šlo v pořádku.

Zkoušel jsem SQL dotaz upravit takto:
`password` = "'.mysql_real_escape_string(SHA1(base62decode($_GET['v4']))).'"

i mysql_real_escape_string úplně vyhodit a to také nepomohlo.

Když si vypíšu parametry z URL pomocí echo jsou přesně takové jako v URL. Dokonce i když si vypíšu samotný SQL dotaz v php a následné ho spustím v phpmyadminovi, pak se hash hesla aktualizuje na správnou hodnotu, když ovšem kliknu zase na odkaz, změní se hash na nějaký jiný špatný. Zkoušel jsem dát i exit() ihned za ten SQL dotaz, abych se ujistil, že se nespustí nic jiného (i když nemá co) a stejně se to aktualizuje špatně. Tohle mi hlava nebere.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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