Mod_rewrite在本地主机上的子目录上不起作用

时间:2018-07-24 13:12:29

标签: php .htaccess mod-rewrite

我有此文件夹系统:

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个服务器错误。

1 个答案:

答案 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的末尾。

在测试之前,请确保清除缓存