2015-11-03 32 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]