htaccess隐藏浏览器的重定向

时间:2014-07-15 08:37:18

标签: apache .htaccess url-rewriting

我已在此处尝试了所有建议,但我无法隐藏.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

2 个答案:

答案 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重定向等?