HTACCESS重写2个和3个变量

时间:2018-01-11 00:42:17

标签: php apache .htaccess url-rewriting

我的网站上需要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部门相当绿色,谷歌搜索没有任何成果。

做什么?

1 个答案:

答案 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]