Mod_rewrite kullanarak bir sorgu dizesi parametre değeri değiştirilmesi

2 Cevap php

Ben bu harita istiyorum:

http://www.example.com/index.php?param1=value1&param2=value2&param3=value3 (etc. ad infinitum)

karşı

http://www.example.com/index.php?param1=newvalue1&param2=value2&param3=value3 (etc.)

In other words, just change the value of a single parameter in the query string. I know what the old value is, so I am trying karşı match the exact text index.php?param1=value1 and replace it with index.php?param1=newvalue1. I cannot seem karşı find any examples on how karşı do this using mod_rewrite. Any assistance greatly appreciated.

2 Cevap

Bu kural deneyin:

RewriteCond %{QUERY_STRING} ^(([^&]*&)*)param1=value1(&.*)?$
RewriteRule ^index\.php$ /index.php?%1param1=newvalue1%3 [L,R=301]

Bu GET params sırasına bağlıdır ancak sizin belirli bir örnek için çalışır, Param1 sonra herhangi bir GET argümanlarımdan korur ve aynı zamanda POST argümanlarımdan koruduğunu, bu kırılgan bir çözümün tür:

RewriteCond %{QUERY_STRING} param1=value1(&.*)*$
RewriteRule ^/index\.php$ /index.php?param1=newvalue1%1 [L]

Ben sadece print_r($_GET) ve print_r($_POST) ve ben şu bakın sonrası args ile komut satırından kıvırmak kullanarak yapar küçük bir test php sayfası var:

$ curl --data "post1=postval1&post2=postval2" "http://www.example.com/index.php?param1=value1&param2=value2&param3=value3"
_GET
Array
(
    [param1] => newvalue1
    [param2] => value2
    [param3] => value3
)

_POST
Array
(
    [post1] => postval1
    [post2] => postval2
)

Eğer daha esnek olması için yeniden yazma şartı aranıyor (yani, yalnızca arg o olsun olabilir, herhangi bir pozisyonda olabilir param1 olabilir bamya gibi yaptığımız bazı koşullu desen eklemek olabilir ama bunu işlemek için gereken tam olarak ne şartlar bilmek iyi olurdu vs)

edit for new requirements below

Aşağıdaki yerde sorgu dize veya url (ama post'ed tuşları / değerleri) in "newvalue1" ile "değer1'i" değiştirilmesi için çalışmak gibi görünüyor:

RewriteCond %{QUERY_STRING} ^(.*)value1(.*)$
RewriteRule ^(.*)$ $1?%1newvalue1%2 [L]

RewriteRule ^(.*)value1(.*)$ $1newvalue1$2 [L]

N% $ N RewriteRule kendisinden değerleri ile ikame için kullanılan en RewriteCond değerleri yerine kullanılmaktadır. sadece iki RewriteRules, sorgu dizesi işlemek için ilişkili RewriteCond ile bunlardan biri kullanılır.