Autor Zpráva
Petr1234
Profil *
Ahoj,

asi dvě hodiny čumím na net, ale nejsem schopen rozchodit přesměrování jedné URL na druhou...

Mám URL např. http://www.domena.cz/?akce=sluzba&id=abc123 a chtěl bych ji přesměrovat na http://www.domena.cz/sluzba/?id=abc123

Kde proměnná ID bývá vždy různá.

Můžete mi, prosím, poradit jak toto ošetřit v .htaccess?

Díky, Petr.
juriad
Profil
Nechceš to spíš opačně?

Kdykoli uživatel zadá adresu http://www.domena.cz/sluzba/?id=abc123, má se zobrazit (nikoli přesměrovat na) obsah adresy http://www.domena.cz/?akce=sluzba&id=abc123.

RewriteRule ^sluzba ?akce=sluzba [QSA]

Pak po zadání té adresy bude zavolán index.php a v $_GET bude:
array(2) { ["akce"]=> string(6) "sluzba" ["id"]=> string(6) "abc123" } 
Petr1234
Profil *
No ona právě adresa na novém webu http://www.domena.cz/?akce=sluzba&id=abc123 nebude existovat, systém, který ji generuje nejde předělat (respektive jde, ale to je jiná kapitola...). Takže pokud přijde uživateli na mail link http://www.domena.cz/?akce=sluzba&id=abc123 a klikne na něj, potřebuji by se mu vlastně "otevřel" http://www.domena.cz/sluzba/?id=abc123.

Díky.
juriad
Profil
Tak v tom případě:
RewriteCond %{QUERY_STRING} ^akce=sluzba&(.*)$
RewriteRule ^.* /sluzba?%1
A v $_GET dostaneš:
array(1) { ["id"]=> string(6) "abc123" }

Pokud bys chtěl přesměrovat a nikoli podstrčit stránku, přidej na konec druhého řádku ještě [R=301].

Užitečné čtení: wiki.apache.org/httpd/RewriteQueryString
Petr1234
Profil *
Hmm, tož jsem to vyzkoušel, ale nestane se absolutně nic. Mod_rewrite normálně používám, ale po přidání tohoto pravidla se nestane nic, ani to třeba nehodí error 500 :(
juriad
Profil
A není tam konflikt s dalším pravidly v tom .htaccess? Předpokládám, že toto není jediné.
Nejspíš by mělo být někde poblíž začátku, aby se další aplikovala až po tomto přepisu.
Petr1234
Profil *
No mam tam "jen":

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domena\.cz
RewriteRule (.*) http://www. domena\.cz/$1 [R=301,QSA,L]
RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$ 
RewriteRule ^(.+[^/])$ /$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ %{DOCUMENT_ROOT}/index.php?page=$1 [L,QSA]
RewriteCond %{QUERY_STRING} ^action=confirm&(.*)$
RewriteRule ^.* /potvrzeni-objednavky?%1
Kajman
Profil
Zkuste
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domena\.cz
RewriteRule (.*) http://www. domena\.cz/$1 [R=301,QSA,L]
RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$ 
RewriteRule ^(.+[^/])$ /$1/ [L,R=301]
RewriteCond %{QUERY_STRING} ^action=confirm&(.*)$
RewriteRule ^.* %{DOCUMENT_ROOT}/index.php?page=potvrzeni-objednavky&%1 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ %{DOCUMENT_ROOT}/index.php?page=$1 [L,QSA]
Petr1234
Profil *
Hmm, toto přesměruje na hlavní stránku webu :(
Kajman
Profil
Přesměrovat by mohlo jen pravidlo na řádku 3. nebo 5.

Zkuste řádky 6-7 dát výše mezi 3 a 4. Pokud tam bude stále přesměrování podívejte se do php, zda se nepřesměruje tam.
Petr1234
Profil *
Nepomohlo :) Ale tak nevadí, zpracuji si URL přes PHP parse_url() a header() to přesměruji kam je potřeba.

I tak díky za pomoc.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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