2013-04-28 70 views
1

我使.htaccess讀取$_GET['ht'] AND $_GET['hht'] as /ht/hht,但現在它不讀取自定義值,當我添加到網址。例如mydomain.com/ht/?smth=else - 它讀作$_GET['smth']。我該如何改變它?.htaccess不讀取自定義請求

.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteBase/

    RewriteCond %{REQUEST_FILENAME} -f [OR] 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule .* - [L] 

    RewriteRule ^([a-zA-Z0-9-z\-]+)/([a-zA-Z0-9-z\-]+)$ index.php?ht=$1&hht=$2 
    RewriteRule ^([a-zA-Z0-9-z\-]+)/([a-zA-Z0-9-z\-]+)/$ index.php?ht=$1&hht=$2 
    RewriteRule ^([a-zA-Z0-9-z\-]+)$ index.php?ht=$1&hht=$2 
    RewriteRule ^([a-zA-Z0-9-z\-]+)/$ index.php?ht=$1&hht=$2 
</IfModule> 

<Files ~ "\.inc$"> 
Order allow,deny 
Deny from all 
</Files> 


<Files .htaccess> 
order allow,deny 
deny from all 
</Files> 
+1

添加'QSA'標誌的重寫(查詢字符串追加,所以你重寫網址會附加原始查詢字符串)。 – Wrikken 2013-04-28 16:23:02

+0

@Wrikken謝謝,它的工作! – Peter 2013-04-28 16:31:42

回答

2

您已在REGEX一個額外的 「-z」。最後兩條規則也可以合併。另外,你在第二個REGEX中聲明瞭一個不在該模式中的變量。由於只有一組圓括號,並且您沒有遞歸匹配字符串的開始和結束,所以不會創建$2

爲了保持瓦爾使用RewriteRule QSA|qsappend

當更換URI包含查詢字符串,默認行爲重寫規則的 是放棄現有的查詢字符串,並更換 與新生成的。使用[QSA]標誌會導致查詢 字符串被合併。

要停止比賽使用RewriteRule L|last

處理規則,如果你在任何.htaccess文件或 部分使用重寫規則,它有 一些瞭解規則是如何是非常重要的處理。這種簡化形式是,一旦處理了規則 ,重寫的請求就被傳回到URL解析引擎 以完成它的任務。有可能 作爲重寫的請求被處理,可能會再次遇到.htaccess文件或 部分,因此規則集可能會從頭開始再次運行 。最常見的情況是,如果 規則之一導致重定向(無論是內部還是外部重定向),則會導致 請求過程重新開始。

RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ index.php?ht=$1&hht=$2 [QSA,L] 
RewriteRule ^([a-zA-Z0-9-]+)/?$ index.php?ht=$1 [QSA,L]