.htaccess url重写是有效但不是重定向

时间:2016-12-22 20:57:31

标签: apache .htaccess redirect mod-rewrite mod-alias

我正在使用html/php应用程序上的本地服务器,并且我试图使用Apache url重写模块而没有成功

该应用程序存储在./Compta/index.php中。我必须在.htaccess

中找到./Compta/.htaccess个文件

我只想使用重写的网址:http://localhost/Compta/Test/

代替:http://localhost/Compta/index.php?page=test

并在用户尝试转到旧网址时重定向用户

.htaccess文件包含:

Options +FollowSymlinks

RewriteEngine on

RewriteRule ^([[:alnum:]]*)/$   /Compta/index.php?page=$1 [L]

RewriteRule ^([[:alnum:]]*)$   /Compta/index.php?page=$1 [L]

RewriteCond %{REQUEST_URI}  ^/index\.php$
RewriteCond %{QUERY_STRING} ^page=([[:alnum:]]*)$
RewriteRule ^(.*)$ http://localhost/Compta/%1/ [L,R=301]

当我转到http://localhost/Compta/Test/时,以下行正在运行,我的代码在div中包含test.php的内容:

RewriteRule ^([[:alnum:]]*)/$   /Compta/index.php?page=$1 [L]

当我转到http://localhost/Compta/Test时,以下行正在运行,但在Firefox中,该网址被重写为http://localhost/Compta/index.php?page=Test,而http://localhost/Compta/Test2则不会发生这种情况。该网址未被重写。

RewriteRule ^([[:alnum:]]*)$   /Compta/index.php?page=$1 [L]

要解决此问题并重定向旧网址,我添加了以下行:

RewriteCond %{REQUEST_URI}  ^/index\.php$
RewriteCond %{QUERY_STRING} ^page=([[:alnum:]]*)$
RewriteRule ^(.*)$ http://localhost/Compta/%1/ [L,R=301]

但这不起作用,当我转到http://localhost/Compta/index.php?page=Test时,该网址未被重写为http://localhost/Compta/Test/

提前谢谢

1 个答案:

答案 0 :(得分:0)

我没有找到.htaccess的解决方案,但是我发现了一个用php,所以我在我的php文件中添加了以下几行:

        if(preg_match("/\/Compta\/index\.php\?page=([[:alnum:]]*)/",@$_SERVER['REQUEST_URI'],$page)&&!empty($page[1]))
        {
            $new_url = "/Compta/";
            switch (strtolower($page[1])) {
                case "test":
                    $new_url = $new_url."Test/";
                    break;
                case "test2":
                    $new_url = $new_url."Test2/";
                    break;
                default:break;
            }
            header("Status: 301 Moved Permanently", false, 301); 
            header("Location: ".$new_url);
            exit;
        }

我测试网址是否以" /Compta/index.php开头?page ="如果有"页面"的参数 然后我初始化包含新url的变量 切换我参数的内容我修改了新的url 然后我重定向到我的新网址:)