Mod Rewrite用于无限类别

时间:2013-05-25 22:09:35

标签: apache .htaccess mod-rewrite

我正在构建一个包含类别的网站,我想通过网址访问它们。

例:
http://website.com/category-1/category-2

可能存在的类别数量没有限制,因此可能有1个或者可能是1,000个。

我需要做些什么来进行可以支持许多类别的重写?然后我将它传递给php进行解析。

以下是我的尝试(给出404):

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ /category.php?params=$1 [L,QSA]

2 个答案:

答案 0 :(得分:1)

如果您不想依赖PHP,则以下规则集可能适用于您:

RewriteEngine on
RewriteRule ^([^/]+)/(.+)$ /$2?catstr[]=$1 [QSA,N] 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)$ /category.php?catstr[]=$1&category=1 [QSA,L]

一个简短的解释:

第一条规则将匹配/ 目录 / 任何并重定向到任何?catstr [] = 目录 。 QSA标志将强制它保留查询字符串参数,N标志将强制rewrite_rule回退规则集。

最后一条规则只是你的最后一条规则。

因此,按顺序,某人点击/ a / b / c / def将被内部抛出(这些查询将不会执行):

/ B / C / DEF?CATSTR [] =一

/ C / DEF CATSTR [] = B&安培; CATSTR [] =一

/ DEF CATSTR [] = C&安培; CATSTR [] = B和CATSTR [] =一

/category.php?catstr [] = DEF&安培; CATSTR [] = C&安培; CATSTR [] = B和= CATSTR A和类别= 1

注意订单将被颠倒是有用的。这可以用于您的优势,是一个功能,而不是一个错误。关于如何将第一次重写规则以正确的方式排序的练习留给读者练习。

然后,您可以使用PHP中的$_GET['catstr']数组来使用URI的每个段。

答案 1 :(得分:0)

我想我明白了,这就是我所拥有的。

.htaccess:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /category.php?catstr=$1&category=1 [L,QSA]

PHP:

<?php
$categories = explode("/", $_GET["catstr"]);
print_r($categories);