Autor Zpráva
Xivanx
Profil *
Zdravím, prošel jsem několik diskuzí a webů s mod rewrite, ale nějak se nemůžu dopátrat správného řešení

potřeboval bych

example.com/stranka/
example.com/stranka.php
example.com/stranka.html
- přesměrovat na example.com/stranka
a example.com/stranka předat index.php

zkoušel jsem několik variant, a nějak nefungují

RewriteEngine on
RewriteCond  %{REQUEST_FILENAME}  -d
RewriteCond  %{REQUEST_FILENAME}  -f
RewriteRule ^(.*)$ /index.php?page=$1 [L]
RewriteRule ^(.*)\/$ $1 [R,L]
RewriteRule ^(.*)\.php$ $1 [R,L]
RewriteRule ^(.*)\.html$ $1 [R,L]

Díky za pomoc
Davex
Profil
Mělo by to být opačně - nejdřív přesměruj a potom teprve přepisuj. Pro odstranění přípony .php následuj odkaz v tématu jak dostat pryč .php.
Xivanx
Profil *
po úpravě na

RewriteRule ^(.*)\/$ $1 [R]
RewriteRule ^(.*)\.php$ $1 [R]
RewriteRule ^(.*)\.html$ $1 [R]

RewriteCond  %{REQUEST_FILENAME}  -d
RewriteCond  %{REQUEST_FILENAME}  -f
RewriteRule ^(.*)$ /index.php?page=$1 [L]

první tři fungují, ale zbytek ne, tedy 404 :-(
Davex
Profil
Ano, jistě. Před přepisem máš podmínky, které jsou pravdivé pouze pokud by požadované URL bylo existující adresář a zároveň soubor - to nelze nikdy splnit. Asi bys měl chtít přepisovat jen neexistující soubory.
Xivanx
Profil *
no jakákoliv změna v tom zápisu podmínek vyvolá chybu 500
Davex
Profil
Xivanx:
jakákoliv změna v tom zápisu podmínek vyvolá chybu 500
Jaká změna?
Xivanx
Profil *
Davex:
Jaká změna?

na negaci, neexistenci adresáře a souboru

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

Moderátor Chamurappi: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Davex
Profil
Xivanx:
1) Chyba 500 tam vznikne proto, protože nemáš ukončené první tři přesměrování příznakem [R,L].
2) Potom ti vznikne další problém ze zacyklením přesměrování, protože jsi nepoužil řešení z odkazu, který jsem posílal - http://latrine.dgx.cz/hadanka-znate-mod_rewrite.
Xivanx
Profil *
Funkční varianta vypadá takhle
jakýkoliv pokus o kontrolu existence končila 500 nebo zacyklováním
RewriteEngine on
RewriteBase /

RewriteRule ^(.+)/$ $1 [L,R=301,NE]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.+)\.html$ $1 [L,R=301,NE]

RewriteCond  %{REQUEST_FILENAME}  !-d
RewriteCond  %{REQUEST_FILENAME}  !-f
RewriteRule ^(.*)$ /index.php?page=$1


Děkuji Davex za ochotu a trpělivost mě posunout ke správnému řešení a ne mi ho tu jen tak napsat (myslím to zcela upřimně, neboť mi to přineslo mnohem víc)
Thak
Profil
Zdravím,
chtěl bych se zeptat, zda nemáte někdo zkušenosti s výkonem při použití mod_rewrite?

Jde mi o následující.. předělávali jsme rozsáhlejší web, ale změnila se podstatně jeho struktura.

Nyní je potřeba původní již za-indexované stránky přesměrovávat na konkrétní jiné stránky.
V praxi to bude znamenat buď "čuňárnu" - fyzicky tam udělat přesměrování v souborech, které tam byly původně,
nebo elegantnější řešení - přesměrovávat dotazy pomocí mod_rewrite.

Jak ovlivňujě počet záznamů modrewrite výkon stránek / serveru ?

Šlo by i s cool url celkem o asi 40řádek / pravidel v mod_rewrite.

Díky za odpovědi!
Davex
Profil
Thak:
Jak ovlivňujě počet záznamů modrewrite výkon stránek / serveru ?
Kdysi jsem měřil jen počet Deny - .htaccess blokace ČR A Slovenska? s mod_rewrite by to bylo horší.

Šlo by i s cool url celkem o asi 40řádek / pravidel v mod_rewrite.
To by mělo být ještě v normální, ale raději bych udělal přesměrování v chybové stránce nebo přímo v aplikaci, když se přijde na to, že obsah pro URL neexistuje. Záleží asi na tom, jak snadno to má být udržovatelné do budoucna.
Thak
Profil
Jasně - tam by se třeba jednoduše dala testovat na chybové stránce URL a přesměrovávat.

Tam jde o to, že je to jen dočasné řešení.

Po re-indexaci celých stránek (což nějakou chvíli zabere), to asi odstraníme. Jsou to navíc tak specifické stránky, že si je asi ani nikdo nebude dávat do bookmarků.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0