我有此文件夹系统:
localhost/websites/2018/mywebsite
我有这个文件:
products.php
所以我在浏览器中输入的完整路由是:
localhost/websites/2018/mywebsite/products.php
现在,我正在尝试使用mod_rewrite来获取此信息:
products.php?cat1=a&cat2=b&cat3=c
对此:
shop/a/b/c
因此完整网址为:
localhost/websites/2018/mywebsite/shop/a/b/c
我尝试将.htaccess放在这里:
localhost/websites/2018/mywebsite
使用以下代码:
RewriteEngine On
RewriteRule ^shop/([^/]*)/([^/]*)/([^/]*)$ /products.php?cat1=$1&cat2=$2&cat3=$3 [L]
但是当我去
localhost/websites/2018/mywebsite/shop/
我得到一个404。我认为它与目录树有关,因为当我将其上传到网站(根目录)时,它工作正常。
编辑:我尝试使用
RewriteBase localhost/websites/2018/mywebsite
有些变化,但是没有用。它引发了500个服务器错误。
答案 0 :(得分:1)
要使用此功能,您需要使用%{QUERY_STRING}
。尝试如下操作:
RewriteEngine On
RewriteCond %{QUERY_STRING} cat1=(.+)&cat2=(.+)&cat3=(.+)$ [NC]
RewriteRule ^ /shop/%1/%2/%3/? [R=301,L,NE]
这将捕获您的每个变量,然后将/shop/a/b/c
重写到URL的末尾。使用?
可以阻止原始查询出现在URL的末尾。
在测试之前,请确保清除缓存 。