Autor Zpráva
maks
Profil
Ahoj,

přesměrovávání - mod_rewrite není můj přítel (bohužel), potřebuji přesměrovat/podstrčit?, zkrátka změnit název složky v URL.

Zápis mám následující:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA] 
#rewrite z /index.php?page=abc na /abc/... funguje

RewriteCond %{QUERY_STRING} slozka
RewriteRule nova-slozka/(.*) slozka/$1 
#pokud výše přesměrovaná URL obsahuje "slozka" (bude na začátku, ale pravidlo jí může hledat klidně kdekoliv), přepis jí. 
#Je to tedy závislé na rewritu výše (nebo je chyba tady a musím pracovat s původní adresou?).
#zkousel jsem pridat i [R] a [R=302], nějak v tom tápu 


Čeho chci docílit? Nyní se mi obsah zobrazuje na http://domena.cz/slozka/stranka.html (A) a já ji potřebuji zobrazit na http://domena.cz/nova-slozka/stranka.html (B). Adresa B po zadání nefunguje.

Ideálně po zadání první adresy (A), aby se změnil i adresní řádek na (B). Toto když nebude, nic se neděje, odkazy ve tvaru A nebudou fungovat, google se na ně tedy nemá jak dostat.


Je to pro někoho prkotina, ale mě tohle moc pomůže.
Děkuji všem.
mattyZEM
Profil
Přidal bych ^$ + RewriteBase a přesunul podmínku na začátek:
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} slozka
RewriteRule nova-slozka/(.*) slozka/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA] 
#rewrite z /index.php?page=abc na /abc/… funguje


Snad to pojede.
maks
Profil
mattyZEM:
Přidal bych ^$
kam?

Snad to pojede.
bohuzel takhle to nejede. Při zadání domena.cz/nova-slozka/obsah/ se požadovaný obsah nezobrazí. domena.cz/slozka/obsah/ funguje.
mattyZEM
Profil
Tak jinak, zapsal bych to tak, jak to používám já.
RewriteEngine On
RewriteBase /

RewriteRule ^nova-slozka/(.*)$ slozka/$1 [L]
RewriteRule ^(.+)$ index.php?page=$1 [L] 
maks
Profil
mattyZEM:
Tak jinak, zapsal bych to tak, jak to používám já.
super, to je ono :-)

Teď mě ještě napadlo, že bych tam mohl udělat podmínku ještě pro jednu složku navíc, ale ta mi připsat už nejde. Můžu tě poprosit o pomocnou ruku ještě jednou?

Jelikož L je tipuji LAST, zkusil jsem ho odmazat a zapsat to následujícím způsobem:
RewriteEngine On
RewriteBase /

RewriteRule ^nova-slozka/(.*)$ slozka/$1 [L] #tady jsem zkousel [L] odebrat, nepomohlo
RewriteRule ^nova-podslozka/(.*)$ podslozka/$1 [L] 
#tady jsem zkousel se striskou, bez ni, s nadrazenou slozkou 
#puvodni i prepsanou (tedy slozka i nova-slozka), nic :(
#potrebuji ted mam po prvnim rewritu URL www.domena.cz/nova-slozka/podslozka/stranka
#dostat www.domena.cz/nova-slozka/nova-podslozka/stranka. Tyhle podsložky tam budou asi
# 3 různé, to si tam vyjmenuji (z podslozka->nova-podslozka, fold1->fold2, atp, každý bude mít svůj řádek předpokládám). Ale jaký?

RewriteRule ^(.+)$ index.php?page=$1 [L] 
mattyZEM
Profil
Pak ale to, co uvádíš musí a nemůže jet.

1) Musí. nova-slozka má za lomítkem nastavené všechno, takže půjde nova-slozka/podslozka/cokoliv.php, ale bude to v slozka/podslozka/cokoliv.php
2) Nemůže, jelikož druhé pravidlo nijak nenavazuje na první, tudíž je nutno napsat tuto (novou) podmínku na začátek a jinak (přidat i to "nova-slozka/").

RewriteEngine On
RewriteBase /

RewriteRule ^nova-slozka/nova-podslozka/(.*)$ podslozka/$i  [L]
RewriteRule ^nova-slozka/druha-podslozka/(.*)$ podslozka/$i  [L]
RewriteRule ^nova-slozka/(.*)$ slozka/$1  [L]
RewriteRule ^(.+)$ index.php?page=$1  [L] 
maks
Profil
mattyZEM:
tudíž je nutno napsat tuto (novou) podmínku na začátek a jinak (přidat i to "nova-slozka/").
nová podmínka mi byla jasná, i ten začátek jsem myslel, že by tam měl být. Zkoušel jsem. Jen jsem to psal pod to, myslel jsem, že to funguje následujícím způsobem.

Nejprve přepiš první složku. Ze vzniklé URL přepiš druhou složku (proto jsem to zkoušel i bez stříšky, která značí začátek řetězce).


Teď to funguje, dík moc.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0