.htaccess mod_rewrite来清理变量网址

时间:2014-04-03 17:14:05

标签: php apache .htaccess mod-rewrite

我确定有什么东西可以回答我的问题,但我找不到。

简而言之:我想使用.htaccess和mod_rewrite来清理我的网址。

目前我有3个可能的变量。

c表示类别,m表示制造商,p表示页面。

如果只有c,它将显示该类别下的所有可能的制造商。如果有c和m,它将显示该类别下该制造商的前30个项目,然后如果有超过30个,您可以转到下一页,p,然后开启。

这就是我想要完成的事情:

index.php?c = Category1变成/ Category1 index.php?c = Category1& m = Manufacturer1变成/ Category1 / Manufacturer1 index.php?c = Category1& m = Manufacturer1& p = 1变为/ Category1 / Manufacturer1 / page / 1(或Category1 / Manufacturer1 / 1 /)

我尝试了一些我已经找到但我无法将其转化为我的情景的事情。

我已经尝试了

RewriteEngine On
RewriteRule ^(.*) index.php?p=$1

RewriteEngine On
RewriteRule ^([^/]+)/?$ index.php?p=$1

然而

RewriteEngine On
RewriteRule ^page/([^/]+)/?$ index.php?p=$1

有效,但这不是我想要的前两个参数。

我需要什么规则?

1 个答案:

答案 0 :(得分:2)

您可以制定3个单独的规则,或者如果您不关心空白$_GET变量,请使用可选分组:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /index.php?c=$1&m=$2&p=$3 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?c=$1&m=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /index.php?c=$1 [L]

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(?:/([^/]+)|)(?:/([^/]+)|)/?$ /index.php?c=$1&m=$2&p=$3 [L]