在 php 中创建包含用户名的用户友好 url
create user friendly url containing username in php
我想在 url 中传递用户名,就像 facebook 等其他社交网站所做的那样。
url 应该是这样的:www.mysite.com/username
如果用户名处的值是目录名,我还希望能够访问目录。
例如。 www.mysite.com/downloads
将进入 downloads
目录。
为此,我能做的是首先检查传递的值在哪里是有效的目录名称。如果是,则访问目录,否则检查用户是否存在并传递了用户名。
为此我所做的是,在包含
的根目录中创建了一个 .htaccess
文件
RewriteEngine On
RewriteRule ^ index.php
并检查 url
// requested url
$request = $_SERVER['REQUEST_URI'];
// trim last / if available
$url = rtrim($request,'/');
// explode url and save in $ar array
$ar = explode('/',$url);
if(sizeof($ar) > 2)
{
header('location : error/?error=1');
} else {
$user = $ar[1];
}
上面的if语句是检查传递的参数是一个还是多个。
前任。 www.mysite.com/username/post
将导致无效 url
但是通过这段代码,我无法访问我的目录www.mysite.com/downloads
执行此操作的简单方法是什么。
Edit 2 :
我希望 url www.mysite.com/username
将 username
作为变量传递 如果不是目录或文件 到 index.php
在 myProfile
目录中作为 $user = $_GET['u'];
访问
已更新.htaccess
# Do not remove this line or mod_rewrite rules and search engine friendly URLs will stop working
RewriteBase /
Options All -Indexes
# Timezone
SetEnv TZ Asia/Kolkata
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /myProfile/index.php?u= [L,QSA]
在 /.htaccess
中尝试此代码:
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
DirectoryIndex index.php
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ myProfile/index.php?u= [L,QSA]
如果您仍然得到 404
然后验证您的 .htaccess
是否启用,方法是将相同的垃圾(随机)文本放在您的 /.htaccess
之上并查看它是否生成在浏览器中访问 www.mysite.com/index.php?u=username
URL 时是否出现 500(内部服务器)错误。
我想在 url 中传递用户名,就像 facebook 等其他社交网站所做的那样。
url 应该是这样的:www.mysite.com/username
如果用户名处的值是目录名,我还希望能够访问目录。
例如。 www.mysite.com/downloads
将进入 downloads
目录。
为此,我能做的是首先检查传递的值在哪里是有效的目录名称。如果是,则访问目录,否则检查用户是否存在并传递了用户名。
为此我所做的是,在包含
的根目录中创建了一个.htaccess
文件
RewriteEngine On
RewriteRule ^ index.php
并检查 url
// requested url
$request = $_SERVER['REQUEST_URI'];
// trim last / if available
$url = rtrim($request,'/');
// explode url and save in $ar array
$ar = explode('/',$url);
if(sizeof($ar) > 2)
{
header('location : error/?error=1');
} else {
$user = $ar[1];
}
上面的if语句是检查传递的参数是一个还是多个。
前任。 www.mysite.com/username/post
将导致无效 url
但是通过这段代码,我无法访问我的目录www.mysite.com/downloads
执行此操作的简单方法是什么。
Edit 2 :
我希望 url www.mysite.com/username
将 username
作为变量传递 如果不是目录或文件 到 index.php
在 myProfile
目录中作为 $user = $_GET['u'];
已更新.htaccess
# Do not remove this line or mod_rewrite rules and search engine friendly URLs will stop working
RewriteBase /
Options All -Indexes
# Timezone
SetEnv TZ Asia/Kolkata
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /myProfile/index.php?u= [L,QSA]
在 /.htaccess
中尝试此代码:
ErrorDocument 404 /404.html
ErrorDocument 403 /403.html
DirectoryIndex index.php
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ myProfile/index.php?u= [L,QSA]
如果您仍然得到 404
然后验证您的 .htaccess
是否启用,方法是将相同的垃圾(随机)文本放在您的 /.htaccess
之上并查看它是否生成在浏览器中访问 www.mysite.com/index.php?u=username
URL 时是否出现 500(内部服务器)错误。