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