2017-07-27 95 views
1

我必須編寫一些重寫規則,我需要根據查詢參數進行檢查。RewriteCond查詢參數在.htaccess文件中

公開的網址是這樣的abc.com/lmn/xyz.json,有一個可選參數optparam

這就是我想要達到的目標:

如果optparam存在並not equal to false,條件有失敗,並與其他規則進行。

在閱讀了一些博客和文章後,我對這些規則有一個很淡的想法。所以試過這個:

RewriteCond %{QUERY_STRING} !^optparam $ [NC,OR] 
RewriteCond %{QUERY_STRING} ^optparam=false$ [NC] 
RewriteRule ^lmn/xyz.json$ xyz.json 

但是,即使我發送參數值爲真,RewriteRule應用。

請告訴我我在這裏失蹤。

在此先感謝!

例子:

abc.com/lmn/xyz.json ==> Rule should fire 
abc.com/lmn/xyz.json?optparam ==> Rule should not fire 
abc.com/lmn/xyz.json?optparam=false ==> Rule should fire 
abc.com/lmn/xyz.json?optPARAM=hfjsgzjrg ==> Rule should not fire 
abc.com/lmn/xyz.json?optParam=FALSE ==> Rule should fire 

回答

1

您的規則改成這樣:

RewriteCond %{QUERY_STRING} ^(optparam=false)?$ [NC] 
RewriteRule ^lmn/xyz\.json$ xyz.json [L,NC] 
+0

如果根本沒有'optparam'會怎麼樣? – Anusha

+0

'?!false $'當值是真的時,它不會觸發規則嗎?它應該只是'?false $',另外,我怎樣才能將它與無參數結合呢? – Anusha

+0

添加了示例,請檢查我的編輯 – Anusha

0

嗯,我想在所有需要的optparam不存在額外的檢查。試過這個:

RewriteCond %{QUERY_STRING} (^$|!^optparam$|^optparam=false$) [NC] 
RewriteRule ^lmn/xyz\.json$ xyz.json [L,NC] 

這似乎適用於我。但是有什麼辦法可以進一步縮短這種情況嗎?我相信我沒有在這裏使用正則表達式來充分發揮它的潛力。