2017-06-15 43 views
0

在目錄$HOME/public_html/test中有兩個文件.htaccessquery.cgi。我想將xxx.cgi?yyy轉換爲query.cgi?a=xxx&yyyRewriteRule以奇怪的方式工作

的.htaccess:

RewriteEngine on 
RewriteRule ^(.*)\.cgi\?(.*)$ query.cgi?a=$1&$2 
RewriteRule ^(.*)\.cgi$  query.cgi?b=$1 

query.cgi(CGI檢查查詢):

#!/usr/bin/perl 
use strict; 
use warnings; 
use utf8; 

my $query = $ENV{QUERY_STRING} ||= "no query"; 
print "Content-Type: text/html; charset=utf-8\n\n"; 
print "<html><body><p>". $query . "</p></body></html>"; 

的問題是:如果我訪問xxx.cgi?yyy,則查詢b=query

我希望應用第一條規則,以便查詢是a=xxx&yyy。但是第一條規則被忽略,第二條規則被應用,儘管由於正則表達式第二條規則不能被應用。

回答

0

您需要考慮的是,查詢字符串不是匹配的一部分,而是存儲在其自己的單獨變量QUERY_STRING中。正如你在腳本中使用的那樣。所以,你需要做這樣的事情:

RewriteCond %{REQUEST_URI} !^/query\.cgi$ 
RewriteRule ^(.+)\.cgi$ /query.cgi?a=$1 [QSA] 

隨着[QSA]標誌,它表示追加到查詢字符串,而不是覆蓋。