2016-02-28 49 views
2

我是一個新手。我想在窗體上轉換的URL重寫規則:.htaccess RewriteRule for abc/xyz/myfile?s = t

abc/xyz/myfile?s=t 

index.php?id=abc&a=xyz&b=myfile.xml&s=t 

ABC是一個固定的前綴。 xyz,myfile和查詢字符串被反向引用。

這是.htaccess文件:

RewriteEngine On 
RewriteRule ^abc/([_0-9a-z]+)/([_0-9a-z]+)\?(.+)$ index.php?id=abc&a=$1&b=$2.xml&$3 [NC] 

它不工作。我調試用下面的perl腳本重寫規則:

#!perl 
use strict; 
use autodie; 
$_ = "abc/xyz/myfile?s=t"; 
if (/^abc\/([_0-9a-z]+)\/([_0-9a-z]+)\?(.+)$/) { 
    print "index.php?id=abc&a=$1&b=$2.xml&$3"; 
} 

輸出是:

index.php?id=abc&a=xyz&b=myfile.xml&s=t 

爲什麼沒有.htaccess文件的工作?

編輯:似乎結果URL中的最後一個參數(s = t)被忽略。

回答

2

您需要使用:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^(.+)$ 
RewriteRule ^abc/([_0-9a-z]+)/([_0-9a-z]+)$ index.php?id=abc&a=$1&b=$2.xml&%1 [NC] 

因爲查詢字符串不是重寫規則左URL的一部分。