.htaccess重写PHP $

的.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将调用的各种页面的所有可能性?

谢谢


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

RewriteEngine ON

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

但是,不要改变你的PHP代码,只include你从$_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确保url不是现有的文件或文件夹(即如果你有一个文件夹images那么site.com/images仍然会去该文件夹,而不是index.php?mode=images

链接地址: http://www.djcxy.com/p/69849.html

上一篇: .htaccess rewrite PHP $

下一篇: PHP, unexpected T