使用.htaccess在php中创建树结构url


Create tree stucture url in php using .htaccess

我开始学习.htaccess文件的基础知识,在这里我想知道如何使用.htaccess文件在php中创建树结构url。例如,我有如下层次结构:科学->生物学->动物学->皮肤病学。域名是www.mydomain.com。因此

如果我点击science,Url应该是www.mydomain.com/science

在科学下如果我点击生物学,Url应该是www.mydomain.com/science/biology

在生物学下如果我点击动物学,Url应该是www.mydomain.com/science/biology/动物学等等

以下是我迄今为止所做的尝试,创建了一个名为branch.php的页面。如果我点击science,我将使用urlwww.mydomain.com/branch/science和htaces文件在branch.php文件中编写代码

Options -Multiviews
Options +FollowSymLinks
RewriteEngine on 
RewriteRule ^branch/(.*) branch.php?branch_name=$1 [L] 

因此,我可以创建类似www.mydomain.com/science/biology/动物学的url,而无需使用.htacces文件创建页面(branch.php)。

你的思想有点迷失方向。

您在PHP中生成的任何类型的url都没有任何限制。

.htaccess(尤其是mod_rewrite)仅用于将请求重定向(对用户透明)到特定的php文件。

所以,是的,你可以这样做url:http://www.example.com/science/biology/zoology,你的.htacces应该是这样的:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* branch.php [L]

然后,在branch.php中,您应该检查$_SERVER['REQUEST_URI'](看起来像这个/science/biology/zoology),并决定向用户显示什么。

需要RewriteCond %{REQUEST_FILENAME} !-f来测试请求的uri是否没有指向真实文件。


更新:如果您想在branch.php中使用$_GET数组,可以执行以下操作:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ branch.php?main_branch=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)$ branch.php?main_branch=$1&sub_branch=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ branch.php?main_branch=$1&sub_branch=$2&sub2_branch=$3 [L]