Autor Zpráva
Jan Kev
Profil *
Dobrý den,

potřeboval bych z adresy CarD.php?title=auto-detail&id=45
udělat přívětivou adresu auto-detail.php?id=45

Použil jsem tyto pravidla:

RewriteCond %{QUERY_STRING} ^title=([^&]+)&(.*)$
RewriteRule CarD.php$ %1.php?%2 [R]



Jenže se mi vypíše tato adresa

auto-detail.php?title=auto-detail&id=45

(já ale potřebuji pouze adresu bez query string title)
Pokud použiji otazník, automaticky se mi vkládají do přesměrovávané adresy všechny query string.
Nevíte někdo co s tím?
Davex
Profil
Podmínka by měla být nejspíš obráceně. Pokud platí směr přepisu auto-detail?id=45 -> CarD.php?title=auto-detail&id=45, tak lze použít pravidlo:
RewriteRule    auto-detail\.php$    CarD.php?title=auto-detail    [L,QSA]


Pokud se má přesměrovávat z CarD.php na auto-detail.php, tak mi tvoje varianta parametr title nedoplňuje.
Kajman_
Profil *
Jan Kev:
Pravidla vypadají v pořádku. Nejsou tam žádná jiná, se kterými to může kolidovat? To by pak mohlo pomoci přidat ještě flag L.
Jan Kev
Profil *
Směr přesměrování mám správně, takhle to potřebuji...

Pořád ale na to nemůžu přijít. Ani flag L nepomohl.

Například když použiji tento předpis:

RewriteCond %{QUERY_STRING} ^title=([^&]+)&(.*)$
RewriteRule CarD.php$ %1.php%2 [R]
(tzn. vynechám schválně ?)

vypíše mi proglížeč adresu:
auto-detail.phpid=5?title=auto-detail&id=45
Kajman_
Profil *
Například když použiji tento předpis:
Tak to se už chová přesně podle pravidel. To není záhada.

K tomu prvnímu příkladu... Opravdu tam nemáte už žádná další pravidla?
Jan Kev
Profil *
Ale je záhada, že když použiji ?%2, tak že vypíše %1 a %2 - tedy obě části regulárního výrazu, i když požaduji pouze (%2 - druhou část).

Opravdu tam jiné nemám.
Kajman_
Profil *
Můžete zapnout rewritelog? Co je v něm?
Davex
Profil
Vypadá to, že se přesměruje správně, ale ještě se přidá původní query (jako s příznakem QSA).

Co se děje po přidání absolutní cesty a změně typu přesměrování?
RewriteCond %{QUERY_STRING} ^title=([^&]+)&(.*)$
RewriteRule CarD.php$ /%1.php?%2 [R=301,L]
Jan Kev
Profil *
Httpd.conf:

RewriteEngine on
RewriteLogLevel 9

RewriteCond %{QUERY_STRING} ^title=([^&]+)&(.*)$
RewriteRule /CarD.asp$ %1.asp?%2 [R]


RewriteLog9:

10.2.0.34 10.2.0.34 Mon, 16-Nov-2009 12:51:00 GMT [10.2.0.34/sid#34][rid#25950504/initial] (2) init rewrite engine with requested uri /user/Account/CarD.asp?title=auto-detail&id=56
10.2.0.34 10.2.0.34 Mon, 16-Nov-2009 12:51:00 GMT [10.2.0.34/sid#34][rid#25950504/initial] (1) Htaccess process request C:\Program Files\ISAPI_Rewrite\httpd.conf
10.2.0.34 10.2.0.34 Mon, 16-Nov-2009 12:51:00 GMT [10.2.0.34/sid#34][rid#25950504/initial] (3) applying pattern '/CarD.asp$' to uri '/user/Account/CarD.asp'
10.2.0.34 10.2.0.34 Mon, 16-Nov-2009 12:51:00 GMT [10.2.0.34/sid#34][rid#25950504/initial] (4) RewriteCond: input='title=auto-detail&id=56' pattern='^title=([^&]+)&(.*)$' => matched
10.2.0.34 10.2.0.34 Mon, 16-Nov-2009 12:51:00 GMT [10.2.0.34/sid#34][rid#25950504/initial] (1) escaping auto-detail.asp?title=auto-detail&id=56
10.2.0.34 10.2.0.34 Mon, 16-Nov-2009 12:51:00 GMT [10.2.0.34/sid#34][rid#25950504/initial] (2) explicitly forcing redirect with http://10.2.0.34/auto-detail.asp?title=auto-detail&id=56
10.2.0.34 10.2.0.34 Mon, 16-Nov-2009 12:51:00 GMT [10.2.0.34/sid#34][rid#25950504/initial] (2) internal redirect with /user/Account/CarD.asp?title=auto-detail&id=56 [INTERNAL REDIRECT]

10.2.0.34 10.2.0.34 Mon, 16-Nov-2009 12:51:00 GMT [10.2.0.34/sid#34][rid#25950504/initial] (2) init rewrite engine with requested uri /auto-detail.asp?title=auto-detail&id=56
10.2.0.34 10.2.0.34 Mon, 16-Nov-2009 12:51:00 GMT [10.2.0.34/sid#34][rid#25950504/initial] (1) Htaccess process request C:\Program Files\ISAPI_Rewrite\httpd.conf
10.2.0.34 10.2.0.34 Mon, 16-Nov-2009 12:51:00 GMT [10.2.0.34/sid#34][rid#25950504/initial] (3) applying pattern '/CarD.asp$' to uri '/auto-detail.asp'
Kajman_
Profil *
301 bych tam nepřidával, pak se to horkotěžko testuje (některé prohlížeče si zapamatují první 301 přesměrování a pak ho jen používají).

Jinak jsem ty pravidla zkoušel a fungují tak, jak chcete...
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^title=([^&]+)&(.*)$
RewriteRule CarD.php$ %1.php?%2 [R,L]


Ten log pak vypadá..
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (3) [perdir D:/www/test/] strip per-dir prefix: D:/www/test/CarD.php -> CarD.php
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (3) [perdir D:/www/test/] applying pattern 'CarD.php$' to uri 'CarD.php'
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (4) [perdir D:/www/test/] RewriteCond: input='title=auto-detail&id=45' pattern='^title=([^&]+)&(.*)$' => matched
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (2) [perdir D:/www/test/] rewrite 'CarD.php' -> 'auto-detail.php?id=45'
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (3) split uri=auto-detail.php?id=45 -> uri=auto-detail.php, args=id=45
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (3) [perdir D:/www/test/] add per-dir prefix: auto-detail.php -> D:/www/test/auto-detail.php
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (2) [perdir D:/www/test/] explicitly forcing redirect with http://test.localhost:8080/D:/www/test/auto-detail.php
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (2) [perdir D:/www/test/] trying to replace prefix D:/www/test/ with /
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (5) strip matching prefix: D:/www/test/auto-detail.php -> auto-detail.php
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (4) add subst prefix: auto-detail.php -> auto-detail.php
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (1) [perdir D:/www/test/] escaping http://test.localhost:8080/auto-detail.php for redirect
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2edcf80/initial] (1) [perdir D:/www/test/] redirect to http://test.localhost:8080/auto-detail.php?id=45 [REDIRECT/302]
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2ee0f90/initial] (3) [perdir D:/www/test/] strip per-dir prefix: D:/www/test/auto-detail.php -> auto-detail.php
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2ee0f90/initial] (3) [perdir D:/www/test/] applying pattern 'CarD.php$' to uri 'auto-detail.php'
127.0.0.1 - - [16/Nov/2009:12:56:06 +0100] [test.localhost/sid#1537478][rid#2ee0f90/initial] (1) [perdir D:/www/test/] pass through D:/www/test/auto-detail.php
Kajman_
Profil *
Tak se obraťte na vývojáře toho modulu pro iis, že to není kompatibilní s chováním mod_rewrite přímo v apachi.
Jan Kev
Profil *
Ok, děkuji za váš čas.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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