我的网站上需要3个变量:网页,类别和子类别。
audi
喜欢这样
我的RewriteRules看起来像这样:
修改
index.php?page=orders&cat=meat&sub=beef
我的问题是,当我尝试$ _GET这个类别时,当只有一个类别而不是一个子类别时,它不起作用
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#Rewrite Page
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page=$1 [NC,L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?/?$ index.php?page=$1&cat=$2&sub=$3 [NC,L]
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?page=$1&cat=$2 [NC,L]
在这里我可以$ _GET类别(肉类)
sitename/order/meat/beef
在这里,我无法
我在htaccess部门相当绿色,谷歌搜索没有任何成果。
做什么?
答案 0 :(得分:0)
你的正则表达式使得匹配的所有部分都是强制性的而不是可选的,所以如果缺少任何部分,则整个事情都会失败。
两个建议的解决方案,
1)用
替换RewriteRule解决方案FallbackResource /index.php
然后在php中使用explode()来获取参数。这是迄今为止最有效的解决方案。也就是说,在你的php中,你会这样做:
list($page, $cat, $sub) = explode('/', trim($_SERVER['PATH_INFO'], '/') );
2)好的,让我们尝试一种不同的方法:
所以,要更新整个规则集:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# page
RewriteRule ^([^/]+)/?$ index.php?page=$1 [NC,L]
# page/category
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?page=$1&cat=$2 [NC,L]
# page/category/sub
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?page=$1&cat=$2&sub=$3 [NC,L]