Autor Zpráva
Jan Onesork
Profil
Dobrý den,
přes mod_rewrite potřebuji přesměrovávat z example.com/kategorie/ na example.com/?kategorie

V .htaccess mám toto:
RewriteEngine on
RewriteRule ^(.*)/$ /?$1 [L,QSA]

to ale funguje pouze, když do příznaku na konci přidám přesměrování -> tedy [L,QSA,R=301] - tím se mi ale změní url v adresním řádku a to nechci.

Kde tedy může být chyba, že to s R=301 funguje?
Kajman
Profil *
Problém bude asi v tom, že nemáte definovaný soubor, na který se to má tajně přepsat.

Osobně bych použil

RewriteEngine on
RewriteBase /
RewriteRule ^(.*)/$ index.php?$1 [L,QSA]

Ale projde všechno, co má na konci lomítko. Možná by stálo za to, otestovat, zda takový adresář opravdu neexistuje a přepisovat jen takové adresy, kde je lomítko jen na konci a ne někde uvnitř ve složitější cestě.
Jan Onesork
Profil
To mi taky nefunguje. No, budu hledat dál.
Kajman
Profil *
Tak jsem to zkoušel a ten soubor tam být nemusí. Pravidla jsou ok, problém bude někde jinde. Spíš bych problém hledal v nastavení php.

Co to vyplivne, když to nefunguje?
Jan Onesork
Profil
Zkoušel jsem různá pravidla a jejich různé variace - většinou to házelo 404 nebo 500 - internal server error.

Nakonec jsem to vyřešil oklikou - přidal jsem to toho prefix a najednou to funguje - musím tedy mít např. example.com/nejaky-prefix/kategorie/subkatogorie -> a to mi jde na example.com/index.php?page=kategorie/subkategorie

Když ale z pravidla ten prefix odstraním, tak to okamžítě přestane fungovat - 404 (hledá to přímo volanou adresu - nepřesměrovává).
Kajman
Profil *
500 bývá způsobeno špatnou syntaxí pravidel v .htaccess. A to 404 vám vypíše jakou adresu to nemůže najít, ne? Je tam napsán index.php v DocumentRoot?
Kajman
Profil *
A někdy s modem rewrite zlobívají starší verze php.
Jan Onesork
Profil
A to 404 vám vypíše jakou adresu to nemůže najít, ne?

No jistě, tu co zadávám do adresního řádku.

Už to asi nechám takhle - s tím prefixem. Děkuji.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0