2015-11-03 52 views
1

所以我有這樣的.htaccess腳本,需要一個URL GET變量通常是這樣的:mod_rewrite的:在URL可選GET變量

domain.com/index.php?PID=test & ID = test2的

,並允許這樣的URL這是用來隱藏GET變量的名稱

domain.com/test/test2/

這是htaccess的腳本 -

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule !/$ %{REQUEST_URI}/ [L,R=301] 

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

RewriteRule ^([^/]+)/([^/]+)/?$ index.php?PID=$1&ID=$2 [L,QSA] 

RewriteRule ^([^/]+)/?$ index.php?PID=$1 [L,QSA] 

它工作正常,允許1或2個變量被傳遞,但我需要一個例子,其中沒有變量被傳遞,例如直接域調用(例如, domain.com),但是上面的規則是在沒有變量的域(例如domain.com//)之後拋出額外的尾部斜槓並導致重定向循環。默認情況下,我試圖將用戶轉發到domain.com/ home /(這是在PHP腳本本身處理)

if(!isset($_GET['PID'])) 
    { 
    header("Location:home"); 
    } 

任何幫助將不勝感激。試圖瞭解.htaccess和mod_rewrite是一個在脖子上的痛苦...

回答

0

重定向發生的原因是你設置的第一條規則。添加條件以排除僅請求服務器根的URL:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^/?$ 
RewriteRule !/$ %{REQUEST_URI}/ [L,R=301]