.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
。
下一篇: PHP, unexpected T