我有一个用户配置文件系统,其中一个动态页面(profile.php)随着用户 ID 的变化而变化。例如。profile.php?id=2 显示 id=2 的用户的个人资料。但我希望地址为 user/user_name.php。因此,为每个用户提供一个唯一的个人资料页面地址。是否可以不为每个用户创建单独的页面?谢谢
问问题
164 次
1 回答
1
好的,让我们谈谈 apache 的 mod_rewrite。基本上人们通常做的是他们设置一个 php 页面,例如。index.php 并在那里重定向所有请求(请求现有文件和目录的请求除外),然后 index.php 将这些请求路由到适当的文件/演示者/控制器等。
我将向您展示一个非常简单的示例如何做到这一点,这只是为了让您了解它在基础知识中的工作原理,并且有更好的方法可以做到这一点(例如看看一些框架)。
所以这是一个非常简单的 .htaccess 文件,与 index.php 放在同一目录中:
<IfModule mod_rewrite.c>
RewriteEngine On
# prevents files starting with dot to be viewed by browser
RewriteRule /\.|^\. - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?query=$1 [L]
</IfModule>
这是 index.php:
<?php
$request = explode("/", $_GET["query"]);
// now you have your request in an array and you can do something with it
// like include proper files, passing it to your application class, whatever.
// for the sake of simplicity let me just show you the example of including a file
// based on the first query item
// first check it´s some file we want to be included
$pages = array("page1", "page2", "page3");
if(!in_array($request[0], $pages)) $request[0] = $pages[0];
include "pages/".$request[0];
但我强烈建议你不要重新发明轮子,看看一些现有的 php 框架。一旦你学会了如何使用它,你会发现它为你节省了很多工作。提到一些 - Zend Framework、Symfony和我正在使用的 - Nette Framework。还有更多,因此请选择适合您需求的任何内容。
于 2013-07-06T06:53:34.250 回答