创建一个网站,我想为我网站上的所有用户(如Facebook)添加自定义配置文件URL。
在我的网站上,人们有一个像http://sitename.com/profile.php?id=100224232
这样的网页但是,我想为那些与其用户名相关的网页制作一面镜像。例如,如果您转到http://sitename.com/profile.php?id=100224232,它会重定向到您http://sitename.com/myprofile
我将如何使用PHP和Apache进行此操作?
答案 0 :(得分:8)
没有文件夹,没有index.php
请看一下这个tutorial。
修改: 这只是一个总结。
我假设我们需要以下网址:
http://example.com/profile/userid(通过ID获取个人资料)
http://example.com/profile/username(通过用户名获取个人资料)
http://example.com/myprofile(获取当前登录用户的个人资料)
在根文件夹中创建.htaccess文件或更新现有文件:
Options +FollowSymLinks
# Turn on the RewriteEngine
RewriteEngine On
# Rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php
这是做什么的?
如果请求是针对真实目录或文件(服务器上存在的那个),则不提供index.php,否则每个URL都会重定向到 index.php 。
现在,我们想知道要触发的操作,因此我们需要阅读URL:
在index.php中:
// index.php
// This is necessary when index.php is not in the root folder, but in some subfolder...
// We compare $requestURL and $scriptName to remove the inappropriate values
$requestURI = explode(‘/’, $_SERVER[‘REQUEST_URI’]);
$scriptName = explode(‘/’,$_SERVER[‘SCRIPT_NAME’]);
for ($i= 0; $i < sizeof($scriptName); $i++)
{
if ($requestURI[$i] == $scriptName[$i])
{
unset($requestURI[$i]);
}
}
$command = array_values($requestURI);
使用网址http://example.com/profile/19837,$命令将包含:
$command = array(
[0] => 'profile',
[1] => 19837,
[2] => ,
)
现在,我们必须发送网址。我们在index.php中添加它:
// index.php
require_once("profile.php"); // We need this file
switch($command[0])
{
case ‘profile’ :
// We run the profile function from the profile.php file.
profile($command([1]);
break;
case ‘myprofile’ :
// We run the myProfile function from the profile.php file.
myProfile();
break;
default:
// Wrong page ! You could also redirect to your custom 404 page.
echo "404 Error : wrong page.";
break;
}
现在在profile.php文件中,我们应该有这样的东西:
// profile.php
function profile($chars)
{
// We check if $chars is an Integer (ie. an ID) or a String (ie. a potential username)
if (is_int($chars)) {
$id = $chars;
// Do the SQL to get the $user from his ID
// ........
} else {
$username = mysqli_real_escape_string($char);
// Do the SQL to get the $user from his username
// ...........
}
// Render your view with the $user variable
// .........
}
function myProfile()
{
// Get the currently logged-in user ID from the session :
$id = ....
// Run the above function :
profile($id);
}
我希望我足够清楚。我知道这段代码并不漂亮,而且不是OOP风格,但它可以提供一些想法......