我正在构建一个包含类别的网站,我想通过网址访问它们。
例:
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]
答案 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);