如何从查询中重写网址
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。
答案 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]