mod_rewrite:URL

时间:2015-11-03 12:03:39

标签: apache .htaccess mod-rewrite url-redirection

所以我有这个.htaccess脚本,它带有一个带有GET变量的URL,通常看起来像这样:

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个变量,但我需要一个传递 No 变量的实例,例如直接域调用(例如domain.com) ,但上面的规则是在没有变量的域之后抛出额外的斜杠(例如domain.com//)并导致重定向循环..默认情况下,我试图将用户转发到domain.com/home/(这在PHP脚本本身处理)

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

非常感谢任何帮助。试图理解.htaccess和mod_rewrite有点痛苦......

1 个答案:

答案 0 :(得分:0)

重定向是因为您设置的第一条规则而发生的。添加条件以排除仅请求服务器根目录的URL:

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