如何使用 php 为我的站点编写动态 URL 脚本?
How do i script dynamic URLs for my site with php?
在我的 Web 服务器文档根目录中,我创建了文件夹 /user/
,其中包含 /index.php
脚本。无论当前(授权)用户如何,我都需要制作一个页面,向 任何人 显示有关我网站上 any 用户的信息,我有一个想法使用查询字符串:
site.com/user/?id=3
但我不想这样做。我想要 GitHub-like 个网址,像这样:
site.com/user/UserName/
此外,我需要允许 URL 继续指定请求哪个 'action',如 subscribe
或 comments
,以及指定用户名的参数:
site.com/user/Admin/comments/32
site.com/user/Admin/virtual/path/
这应该是对物理路径的简单重写:`/user/index.php'.
我是 PHP 的新手,但我了解 mod_rewrite 和 .htaccess 的基础知识,但我仍然不明白如何确定哪个用户 (Admin
) 和在我的 PHP 脚本 index.php
.
中,URL 请求了什么操作 (comments
)
请教我如何为我的站点达到这种 URL 语法?或者更好的是,如何将 /user/Admin/comments
重定向到物理 /user/comments.php
..
- 如何通过为 php 脚本保存 username/action 来设置这种动态重写?
- 脚本如何访问 URL
请求的用户名和操作(comments
、32
)
- 我应该如何重命名我的问题,因为这个标题似乎不正确。
抱歉,文字很长,我是清洁 PHP 脚本的新手,谢谢!
使用 URL-Rewrite-Engine 或使用 MVC 框架 开始编程,例如 symfony
或 cakePHP
,其中包含功能
像上面的答案一样 - 您需要启用 mod_rewrite 然后在您的 .htaccess 文件中提供映射模式。
我相信您还必须确保您的虚拟主机配置为
`Allow Override ALL`
此页面提供了很好的详细信息 - 向下滚动到标题为 "How to Rewrite urls" 的部分。
http://www.smashingmagazine.com/2011/11/02/introduction-to-url-rewriting/
如果你真的想自己做,如果你做也没关系,这是你需要做的一个例子做。我知道不是每个人都需要或想要使用框架。
首先假设您的用户 URL 就像 Github 示例。
http://www.yoursite.com/user/dmitrij
然后,对于您的 .htaccess,您将需要这样的重写规则。
RewriteEngine On
# check to make sure the request is not for a real file
RewriteCond %{REQUEST_FILENAME} !-f
# check to make sure the request is not for a real directory
RewriteCond %{REQUEST_FILENAME} !-d
#route request to index.php
RewriteRule ^user/([^/]+)/? /user/index.php?id= [L]
然后如果你想显示评论,你的URL可以像这样
http://www.yoursite.com/user/dmitrij/comments/32
然后就可以使用.htaccess
RewriteEngine On
# check to make sure the request is not for a real file
RewriteCond %{REQUEST_FILENAME} !-f
# check to make sure the request is not for a real directory
RewriteCond %{REQUEST_FILENAME} !-d
#route request to index.php
RewriteRule ^user/([^/]+)/comments/([0-9]+)/? /user/index.php?id=&comment_id= [L]
然后您可以将它们全部放在 URL 的 .htaccess 文件中。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/([^/]+)/comments/([0-9]+)/? /user/index.php?id=&comment_id= [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/([^/]+)/? /user/index.php?id= [L]
然后在您的 index.php
中您将检查 $_GET
请求。 这是一个非常简单的例子。
<?php
$username = $_GET["id"];
$com_id = $_GET["comment_id"];
print_r($username);
exit;
?>
确保在服务器上启用 mod_rewrite
并且在虚拟主机或配置文件中设置 AllowOverride All
。
您可以使用 $_GET
中的值做任何您想做的事情。您必须确保 username
在您的数据库中是唯一的。您还可以为不同的 URL 添加更多重写,我不会在这里介绍。
这应该让你有一个好的开始。
在我的 Web 服务器文档根目录中,我创建了文件夹 /user/
,其中包含 /index.php
脚本。无论当前(授权)用户如何,我都需要制作一个页面,向 任何人 显示有关我网站上 any 用户的信息,我有一个想法使用查询字符串:
site.com/user/?id=3
但我不想这样做。我想要 GitHub-like 个网址,像这样:
site.com/user/UserName/
此外,我需要允许 URL 继续指定请求哪个 'action',如 subscribe
或 comments
,以及指定用户名的参数:
site.com/user/Admin/comments/32
site.com/user/Admin/virtual/path/
这应该是对物理路径的简单重写:`/user/index.php'.
我是 PHP 的新手,但我了解 mod_rewrite 和 .htaccess 的基础知识,但我仍然不明白如何确定哪个用户 (Admin
) 和在我的 PHP 脚本 index.php
.
comments
)
请教我如何为我的站点达到这种 URL 语法?或者更好的是,如何将 /user/Admin/comments
重定向到物理 /user/comments.php
..
- 如何通过为 php 脚本保存 username/action 来设置这种动态重写?
- 脚本如何访问 URL 请求的用户名和操作(
- 我应该如何重命名我的问题,因为这个标题似乎不正确。
comments
、32
)
抱歉,文字很长,我是清洁 PHP 脚本的新手,谢谢!
使用 URL-Rewrite-Engine 或使用 MVC 框架 开始编程,例如 symfony
或 cakePHP
,其中包含功能
像上面的答案一样 - 您需要启用 mod_rewrite 然后在您的 .htaccess 文件中提供映射模式。
我相信您还必须确保您的虚拟主机配置为
`Allow Override ALL`
此页面提供了很好的详细信息 - 向下滚动到标题为 "How to Rewrite urls" 的部分。
http://www.smashingmagazine.com/2011/11/02/introduction-to-url-rewriting/
如果你真的想自己做,如果你做也没关系,这是你需要做的一个例子做。我知道不是每个人都需要或想要使用框架。
首先假设您的用户 URL 就像 Github 示例。
http://www.yoursite.com/user/dmitrij
然后,对于您的 .htaccess,您将需要这样的重写规则。
RewriteEngine On
# check to make sure the request is not for a real file
RewriteCond %{REQUEST_FILENAME} !-f
# check to make sure the request is not for a real directory
RewriteCond %{REQUEST_FILENAME} !-d
#route request to index.php
RewriteRule ^user/([^/]+)/? /user/index.php?id= [L]
然后如果你想显示评论,你的URL可以像这样
http://www.yoursite.com/user/dmitrij/comments/32
然后就可以使用.htaccess
RewriteEngine On
# check to make sure the request is not for a real file
RewriteCond %{REQUEST_FILENAME} !-f
# check to make sure the request is not for a real directory
RewriteCond %{REQUEST_FILENAME} !-d
#route request to index.php
RewriteRule ^user/([^/]+)/comments/([0-9]+)/? /user/index.php?id=&comment_id= [L]
然后您可以将它们全部放在 URL 的 .htaccess 文件中。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/([^/]+)/comments/([0-9]+)/? /user/index.php?id=&comment_id= [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^user/([^/]+)/? /user/index.php?id= [L]
然后在您的 index.php
中您将检查 $_GET
请求。 这是一个非常简单的例子。
<?php
$username = $_GET["id"];
$com_id = $_GET["comment_id"];
print_r($username);
exit;
?>
确保在服务器上启用 mod_rewrite
并且在虚拟主机或配置文件中设置 AllowOverride All
。
您可以使用 $_GET
中的值做任何您想做的事情。您必须确保 username
在您的数据库中是唯一的。您还可以为不同的 URL 添加更多重写,我不会在这里介绍。
这应该让你有一个好的开始。