Apache中重寫URL參數(shù)(Query String)
URL參數(shù)(Query String)是URL里面“?”后面的部分瓜浸,它通常用于傳輸參數(shù)給CGI腳本或者其它動態(tài)頁面竖哩。在Apache中苍鲜,該值存儲在環(huán)境變量QUERY_STRING中(在PHP中,可以通過$_SERVER['QUERY_STRING']訪問到)伤为。
在Apache中本鸣,大多對URL進行操作的指令,如壮莹、Redirect翅帜、Alias和RewriteRule,都不能直接訪問該數(shù)據命满;不過涝滴,mod_rewrite模塊卻可以對URL參數(shù)進行添加、刪除和修改胶台。其中的關鍵就是使用RewriteCond來匹配%{QUERY_STRING}變量歼疮,如果需要的話,還可以使用[QSA]標志來附加URL參數(shù)诈唬。
下面是一些例子韩脏。這些例子是放在Apache的配置文件中的服務器配置里,如果需要放到區(qū)或.htaccess里面铸磅,RewriteRule應做相應的修改赡矢。此外杭朱,這些例子也可通過在RewriteRule規(guī)則后加上[R]標志,從“內部別名方式(Alias)”變成“外部跳轉方式(Redirect)”吹散。
通過URL參數(shù)進行訪問控制
如果 http://example.com/page?var=val 中的 var=val 包含字符串 foo 弧械,則禁止訪問。
1.RewriteCond %{QUERY_STRING} foo
2.RewriteRule ^/page - [F]
刪除URL參數(shù)
將URL參數(shù)直接從URL中刪除空民。
1.RewriteRule ^/page /page?
增加URL參數(shù)
通過[QSA]標志保留原有URL參數(shù)的同時刃唐,在后面增加新的URL參數(shù):var=val。
1.RewriteRule ^/page /page?var=val [QSA]
重寫某些URL參數(shù)
當URL參數(shù)包含字符串val時界轩,將URL:http://example.com/page1?var=val 重寫為: http://example.com/page2?var=val 画饥。
1.RewriteCond %{QUERY_STRING} val
2.RewriteRule ^/page1 /page2
注意,在這里如果你不修改URL參數(shù)的話浊猾,不需要使用[QSA]標志抖甘,原來的URL參數(shù)是默認附加的。
修改URL參數(shù)
當訪問 /path 時与殃,將字符串 val 修改為 other_val 单山。
1.RewriteCond %{QUERY_STRING} ^(.*)val(.*)$
2.RewriteRule /path /path?%1other_val%2
上面的%1和%2是反向引用碍现,來自之前的RewriteCond中正則表達式的匹配結果幅疼。
將URL參數(shù)轉換為路徑
將URL:http://example.com/path?var=val 轉換為: http://example.com/path/var/val 。
1.RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
2.RewriteRule ^/path /path/%1/%2?
注意上面的轉換僅用于單一的 var=val 參數(shù)昼接,且其中只能包含字母爽篷、數(shù)字和下劃線。
將路徑轉換為URL參數(shù)
這是上面的轉換的反向操作慢睡。這個例子可以轉換有效的任意三級路徑的URL: http://example.com/path/var/val 將轉換為 http://example.com/path?var=val 逐工。
1.RewriteRule ^/path/([^/]+)/([^/]+) /path?$1=$2
關于路徑轉換可以參考重寫路徑信息(PathInfo)。