.htaccess重写PHP $ _GET多个页面

时间:2011-08-25 13:23:28

标签: php .htaccess mod-rewrite get

的.htaccess

    RewriteEngine On
    RewriteRule register index.php?mode=register
    RewriteRule login index.php?mode=login

的index.php

    <?php
    if ( isset ( $_GET['mode']) && ( $_GET['mode'] == 'register' ) ) {
        include('includes/register.php');
    } elseif ( isset ( $_GET['mode']) && ( $_GET['mode'] == 'login' ) ) {
        include('includes/login.php');  
    }
    ?>

这是我目前的方法(感谢@TROODON)。

是否有更简单的方法,可能使用键值数组存储index.php将调用的各种页面的所有可能性?

由于

1 个答案:

答案 0 :(得分:2)

对于.htaccess,你可以这样做:

RewriteEngine ON

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?mode=$1 [L,QSA]

但是,不要将include的PHP代码更改为$_GET['mode']!这将允许用户随意包含。

您可以像这样调整PHP代码:

$pages = array("register" => "includes/register.php",
               "login"    => "includes/login.php");

if(isset($_GET['mode']) && $pages[$_GET['mode']])
    include $pages[$_GET['mode']];

PS:两个RewriteCond确保网址不是现有文件或文件夹(即如果你有一个文件夹images,那么site.com/images仍然会转到该文件夹index.php?mode=images