使用管道和逗号重写URL

时间:2014-07-31 08:40:39

标签: php .htaccess rewrite

如何从查询中重写网址

http://localhost/index.php?c=vga&av=France|originaly,540-MHZ|freq

http://localhost/index.php?c=fructe-congelate&gramaj=1+Kg&av=Romania|Tara%20de%20origine,-18%20grade|Temperatura%20de%20pastrare&brand=Royal

类似于:

http://localhost/fructe-congelate/gramaj-1+Kg/brand-royal/filtre/Romania|Tara-de-origine,-18|Temperature

我是为购物车上的过滤系统做这件事 这就是我目前在.htaccess中所拥有的:

RewriteEngine On 
Options -Indexes 
Options +FollowSymLinks
<Files .htaccess>
deny from all
</Files>

RewriteRule ^([A-Za-z0-9_?-]+)/?$ index.php?c=$1 [NC,L]
RewriteRule ^([A-Za-z0-9_?-]+)/filtre/([A-Za-z0-9_?-]+)/?$ index.php?c=$1&av=$2 [NC,L]

所有产品过滤器(属性)都存储在$ av中,但我有预定义的参数,如gramaj,brand,inoffer,页面,其值附加到sql查询并添加到URL。

2 个答案:

答案 0 :(得分:1)

由于除了字母数字之外你还有各种特殊字符,最好像这样使用[^/]+

Options +FollowSymLinks -Indexes
<Files .htaccess>
deny from all
</Files>

RewriteEngine On 

# skip files and directories from further rules:
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^([^/]+)/?$ index.php?c=$1 [QSA,L]
RewriteRule ^([^/]+)/filtre/([^/]+)/?$ index.php?c=$1&av=$2 [NC,L,QSA]

RewriteRule ^([^/]+)/water/brand-([^/]+)/country-([^/]+)/filter/(.*)/?$ index.php?c=$1&brand=$2&country=$3&av=$4 [NC,L,QSA]

答案 1 :(得分:0)

您可能需要在重写规则中使用QSA标记。这也会将您的查询字符串路由到您的php脚本。

RewriteRule ^([A-Za-z0-9_?-]+)/?$ index.php?c=$1 [NC,L,QSA]

但是使用该正则表达式,您的管道和逗号不包括在内。您需要将它们添加到允许的字符列表中:

RewriteRule ^([A-Za-z0-9_?-,\|]+)/?$ index.php?c=$1 [NC,L,QSA]

或者你只是说给我任何东西:

RewriteRule (.*) index.php?c=$1 [NC,L,QSA]