.htaccess 重定向到另一个目录时出错


.htaccess error redirecting to another directory

我在重写我的网址的.htaccess上遇到了问题。我创建了一个简单的动态网站,我不知道如何解决它。这是我的登录网址localhost/foss/然后成功登录后,用户将被重定向到localhost/foss/main

这是我的.htaccess的代码

RewriteEngine on
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?p=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?p=$1

这是我的PHP,它根据p值处理包含文件。

<?php
    $page = $_GET['p'];
    $pages = array('home', 'inv_view', 'inv_add', 'inv_delete', 'inv_edit', 's_view', 's_add', 's_delete', 'change_pass', 'register', 'logout');
    if (!empty($page))
    {
        if(in_array($page, $pages))
            include $page . '.php';
        else
            echo 'Page not found!';
    }
    else
        include 'home.php';         
?>

这是工作正常的,唯一奇怪的事情是,在用户被重定向到localhost/foss/main之后,.htaccess将URL重写为localhost/foss/main/?p=main,但是当我选择一个链接,如localhost/foss/main/home,它将正常工作。 如何在用户登录后摆脱 ?p=main 并重定向到 localhost/foss/main

发生

此行为的原因mod_dir因为模块在mod_rewrite后运行,并在重写规则之后在目录main/前面添加尾部斜杠,并且您获得的最终URL为localhost/foss/main/?p=main

要解决此问题,请在刷新标记中使用尾部斜杠:

header('refresh: 5; url = main/');