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

时间:2016-07-24 15:59:54

标签: php .htaccess friendly-url

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

如果我点击科学,则网址应 www.mydomain.com/science

在科学下如果我点击生物学,则网址应 www.mydomain.com/science/biology

生物学下如果我点击动物学,则网址应 www.mydomain.com/science/biology/zoology 。等等。

以下是我到目前为止所尝试的内容,创建了一个名为branch.php的页面,如果我点击科学,我将使用网址 www.mydomain.com/在branch.php文件中编写代码分支/科学和htacces文件

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

所以我可以创建像 www.mydomain.com/science/biology/zoology 这样的网址,而无需使用.htacces文件创建页面(branch.php)。

1 个答案:

答案 0 :(得分:0)

你的想法有点迷失方向。

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

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

所以,是的,你可以这样做: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没有指向真实文件。

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

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]