Htaccess网址创建和PHP

时间:2014-07-22 20:23:47

标签: php .htaccess

我的代码存在问题

问题是我的php文件获得了如下所示的$ _GET值:

// Look if there is a page asked
if(isset( $_GET['section'] )) {
    // Page asked lets see what we do with it
    if(isset( $_GET['subtopic'])) {
        $path = "content/" . $_GET['section'] . "/" . $_GET['subtopic'] . ".php";
        if(file_exists($path)) {
            // Asked ?section=&subtopic= lets check if exist then include
            include($path);
        }
        else {
            // Asked ?section=&subtopic= not found throw 404
            echo '404 - not found';
        }
    }
    else {
        $path = "content/" . $_GET['section'] . "/index.php";
        if(file_exists($path)) {
            // Asked ?section= existed include
            include($path);
        }
        else {
            // Asked ?section not found throw 404
            echo '404 - not found';
        }   
    }
}
else{
    // No page asked throw default page
    include('content/home/news.php');
}

所以当我的ip就像这个IP /?section = home& subtopic = news

它代表的是该部分是应该在上面的代码中显示的文件夹。但我使用.htaccess文件制作?section = home使其成为IP / home /?subtopic = news但是当我做IP / home /?subtopic = news它给我/ home / not found我觉得问题是在我的.htaccess文件中:

RewriteEngine on
RewriteBase /

RewriteRule ^(\W+)/$ /index.php?section=$1
RewriteRule ^(\w+)/(\w+)/$ /index.php?section=$1&subtopic=$2

这是我的.htaccess文件来完成它,但它只是不想工作所以我希望你们能帮助我。

亲切的问候,

杰弗里

2 个答案:

答案 0 :(得分:0)

好吧,我建议你做一点容易,只传递一个变量比两个变量更容易,然后你可以处理变量来提取你需要的2个数据。为此,您必须将此代码放在.htaccess文件

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?data=$1 [QSA]

现在在您的index.php文件中,您拥有$_GET['data']上的2个数据,所有您需要做的就是像这样爆炸字符串

$data = explode("/", $_GET['data']);
$section = $data[0];
$subtopic = $data[1];

然后你可以做所有的测试......不要忘记激活" rewrite module"在您的Apache服务器上

答案 1 :(得分:0)

如果您使用' /'在正则表达式中 - 更好地需要在/ /之前添加符号\

这个.htaccess指令有效:

RewriteEngine on
RewriteBase /
RewriteRule ^(\w+)\/$ /index.php?section=$1
RewriteRule ^(\w+)\/(\w+)\/$ /index.php?section=$1&subtopic=$2

还需要启用apache .htaccess文件。 您需要修改包含AllowOverride None的行以在apache config或virtualhost文件中读取AllowOverride All。这告诉Apache,允许.htaccess文件覆盖以前的指令是可以的。 例如:

    <Directory /var/www/> # /var/www/ - web site root directory
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

在此更改生效之前,您必须重新加载Apache。