1

我正在尝试将用户键入的所有 URL 登录到数据库。

在此之后,如果路径存在,我想将用户重定向到路径

否则我想将用户留在根目录中。

我输入的网址 http://www.mydomain.com/folder1/index.php

输出画面

folder1/index.php
Array ( [0] => folder1 [1] => index.php ) url = to folder 1
folder1/index.php

根目录 index.php

<?php
        if ($_GET['url']!= "") {
            // url not empty there is query string
            $url = $_GET['url'];
            $url = rtrim($url, '/');

            echo ($url.'<br />');
            $url = explode('/', $url);
            $file = $url[0];
            print_r($url);
        }

        else // url empty it is root directory
            {echo ('<br /> url empty <br />');}

        if ($url[0] == 'folder1'){
            echo ('url = to folder 1<br />');
            $path = $url[0].'/index.php';

            //the path exists do redirect to folder1/index.php
            echo $path ;
                 header( 'Location: http://www.mydomain.com/{$path}' ) ;
        }
?>

Htaccess

RewriteEngine on
Rewritecond %{HTTP_HOST} !^www\.mydomain\.com
RewriteRule (.*) //www.mydomain.com/$1 [R=301,L]
RewriteRule \.(sql)$ - [F]
RewriteRule \.(txt)$ - [F]
RewriteRule \.(zip)$ - [F]
RewriteRule \.(rar)$ - [F]

<IfModule mod_rewrite.c>
# For security reasons, Option followsymlinks cannot be overridden.
#  Options +FollowSymLinks
   Options +SymLinksIfOwnerMatch
   Options -Indexes
   RewriteEngine On
   RewriteCond %{http_host} ^mydomain.com [NC]
   RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,NC]
   RewriteRule ^([^\.]+)$ index.php?url=$1 [QSA,L,NE]
</IfModule>


RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L,NE]

非常感谢

4

5 回答 5

2

我认为它的引号问题用双引号改变

             header( "Location: http://www.mydomain.com/{$path}" ) ;
于 2012-12-17T11:07:19.190 回答
1

删除此行之前并在之后echo写入exit();

header( "Location: http://www.mydomain.com/{$path}" );
exit();
于 2012-12-17T11:06:21.967 回答
0

任何 html 输出都不应该在

header('位置:http ://www.mydomain.com/ {$path}');

以下 2 行将帮助您避免在标题语句之前使用 htlm。

把 ob_start(); 在您的代码的开头。

将 ob_end_flush() 放在代码的末尾。

谢谢。

于 2012-12-17T11:25:38.730 回答
0

您不能在任何标题行之前有任何输出,因此您必须删除标题位置语句之前的所有回声:

<?php
    if ($_GET['url']!= "") {
        // url not empty there is query string
        $url = $_GET['url'];
        $url = rtrim($url, '/');

        $url = explode('/', $url);
        $file = $url[0];
    }

    else // url empty it is root directory
        {}

    if ($url[0] == 'folder1'){
        $path = $url[0].'/index.php';

        //the path exists do redirect to folder1/index.php
        header( "Location: http://www.mydomain.com/$path" ) ;
    }

当你在字符串中使用变量时,你应该使用双引号而不是单引号。

于 2012-12-17T11:07:37.700 回答
0

你应该像这样使用,(即)php变量应该来自引号并连接起来,

header( "Location: http://www.mydomain.com/".$path) ;

在重定向之前删除回声 - 必须

于 2012-12-17T11:20:30.977 回答