Autor Zpráva
Timy
Profil
Mám následující pravidla:

RewriteRule ^result/([a-z]+)$ index.php?page=result&code=$1 [L]
RewriteRule ^([a-z\.]+)$ index.php?page=result&web=$1 [L,QSA]


Cílem mého snažení je, aby se dělo toto:
example.com/result/abc => example.com/index.php?page=result&code=abc
example.com/stranka.com => example.com/index.php?page=result&web=stranka.com

Při tomto RewriteRule mi funguje správně přepis example.com/stranka.com, ale nesprávně mi funguje result/abc. Pokud zajdu na stránku example.com/result/abc, provede se nejspíše i druhý RewriteRule, protože když si nechám vypsat $_GET["web"], tak je tam uloženo "index.php".

Z návodu jsem pochopil, že příznak L ukončí přepisování, takže když dojde k přepsání podle prvního Rewritu, už by se neměl dostat na druhý. Pokud druhý Rewrite odstraním, tak první funguje správně.

Kde mám, prosím, chybu?

EDIT:
Aha, já to mám asi ještě blběji. Stejná chyba se objeví, i když jen zavolám example.com/. Stránka se přepíše na example.com/index.php?page=result&web=index.php.

EDIT2:
Zatím jsem vyřešil tak, že jsem k druhému Rewritu přidal lomítko: RewriteRule ^([a-z\.]+)/$ index.php?page=result&web=$1 [L,QSA] Neaktivuje se to pak na example.com/index.php. Ale kdyby existovalo nějaké elegantní řešení bez toho lomítka, tak by to bylo fajn :-).
Timy
Profil
Zapomněl jsem na oznámení na email…
Kajman_
Profil *
Z návodu jsem pochopil, že příznak L ukončí přepisování

Pouze v rámci jednoho průchodu pravidly. Pokud se požadavek přepsal, prochází se pravidla znovu od začátku pro nový požadavek. Když si zapnete rewritelog, bude tam asi 10 těch přepsání, než to narazí na stanovený defaultní limit.

Řešením je např. test na to, že to není normální soubor:

RewriteRule ^result/([a-z]+)$ index.php?page=result&code=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f #ignoruj vsechy opravdove soubory (php skripty, obrazky, styly)
RewriteRule ^([a-z\.]+)$ index.php?page=result&web=$1 [L,QSA]
Timy
Profil
Kajman_
Díky! :-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0