2016-07-23 4 views
1

Я пытаюсь перенаправить от /somedir/index.php?action=something&id=x к /index.php?action=something&id=xHtaccess перенаправить если один запрос соответствует парам

Только если action = something. id является динамическим.

Совсем недавно я пробовал это без везения. Что не так с этим?

<IfModule mod_rewrite.c> 
RewriteCond %{QUERY_STRING} (^|&)action=something($|&) 
RewriteCond %{QUERY_STRING} (^|&)id=($|&) 
RewriteRule ^somedir/index\.php$ /index.php?action?something&id=%2$ [NC,R] 
</IfModule> 

Примечание: у somedir есть index.php и это правило в его htaccess. Это приведет к конфликтам?

RewriteRule ^.*$ index.php [NC,L] 

ответ

0

Попробуйте это правило вместо вашего правила в .htaccess

<IfModule mod_rewrite.c> 
RewriteCond %{QUERY_STRING} (^|&)action=something($|&) 
RewriteCond %{QUERY_STRING} (^|&)id=x($|&) 
RewriteRule ^somedir/index\.php$ /index.php?action=something&id=x [L,R=301] 
</IfModule> 

Результат не конфликтуют.

+0

Я вижу 'ID = x' в этом правиле. Означает ли это, что 'id' всегда будет' x'? Это динамический параметр – rzr

+0

X будет принимать значение во втором условии. – error2007s

+0

Кажется не работает:/ – rzr

0

Вы можете использовать:

<IfModule mod_rewrite.c> 
RewriteCond %{QUERY_STRING} (?:^|&)(action|id)=([^&]+)&(?:.*&)?(action|id)=([^&]+)(?:$|&) [NC] 
RewriteRule ^somedir/index\.php$ /index.php?%1=%2&%3=%4 [NC,L,R=301] 
</IfModule> 
Смежные вопросы