我已在此处尝试了所有建议,但我无法隐藏.htacess
重写规则中的重定向。我的完整.htaccess是:
RewriteEngine On # Turn on the rewriting engine
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^classes/(.+)?$ index.php [L]
#shop
RewriteRule ^shop/(sector1|sector2|sector3|sector4)/([A-Za-z0-9-]+) shop?site=$1&category=$2 [NC]
RewriteRule ^shop/(sector1|sector2|sector3|sector4)/$ shop?site=$1 [NC,L]
我得到的建议是移除[r=301]
,但我从来没有那个旗帜。无论我尝试什么example.com/shop/sector1
始终显示为example.com/shop?site=sector1
任何帮助赞赏
[edit]我在localhost上运行它作为虚拟主机。 Mac OS 7.5,Apache 2.2.26
[edit]同样来自doc根目录的还有其他.htaccess
个文件,但在' shop'具有上述重写的文件夹应该起作用。
$ find . -name .htaccess
./.htaccess
./assets/images/.htaccess
./cms/.htaccess
./cms/assets/images/.htaccess
./cms/assets/plugins/ckfinder/userfiles/.htaccess
./cms/modules/default_images/.htaccess
./sagepay/VspPHPKit/demo/.htaccess
./sagepay/VspPHPKit/lib/.htaccess
./uploads/.htaccess
./uploads/products/.htaccess
我的目录结构也是(注意我的重定向shop
是一个实际文件夹 - 这可能是问题的一部分吗?):
$ tree -d -L 1 ./
./
├── assets
├── classes
├── cms
├── contact
├── foo
├── news
├── page
├── products
├── sagepay
├── sample
├── search
├── services
├── shop
├── snippets
├── uploads
└── widgets
答案 0 :(得分:1)
在问题shop
之后重写的URI中缺少尾部斜杠,因为它是一个真正的目录,而Apache的mod_dir
将执行301重定向以添加尾部斜杠以使/shop/
和将最终网址设为:example.com/shop/?site=sector1
最好更改规则的顺序,并确保在每个规则的末尾使用L
标志:
RewriteEngine On
RewriteBase /
RewriteRule ^shop/(sector1|sector2|sector3|sector4)/([A-Za-z0-9-]+) shop/?site=$1&category=$2 [L,QSA,NC]
RewriteRule ^shop/(sector1|sector2|sector3|sector4)/$ shop/?site=$1 [NC,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^classes/ index.php [L,NC]
另外,我建议您在单独的浏览器中测试您的规则。
答案 1 :(得分:0)
这可能听起来真的很愚蠢,但它在很多个月前就把我抓了出来。鉴于你的代码对我来说很好,这让我感到奇怪......
当我发现自己发生这种情况时,事实证明我所有的href
属性实际上都是重定向后的地址!例如。仔细检查您的href
属性是example.com/shop/sector1
而不是example.com/shop?site=sector1
。
否则其他东西可能会干扰。你的htaccess中还有其他代码吗?任何PHP重定向等?