mod_rewrite麻烦 - RewriteEngine On尝试访问子目录时给出403

时间:2012-12-29 17:18:03

标签: apache mod-rewrite

我在共享主机网站空间上运行了一个网店(xtCommerce)。

根目录(商店1的安装,启动和运行)包含商店软件提供的.htaccess文件

DirectoryIndex index.php

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/media/
RewriteCond %{REQUEST_URI} !^/extAdmin/
RewriteCond %{REQUEST_URI} !^/skin/
RewriteCond %{REQUEST_URI} !^/js/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule .* index.php

我现在在同一个网站空间的/ shop2中安装了第二个网上商店(也就是xtcommerce),其中包含相同的.htaccess文件

www.shop1.net -> /
www.shop2.net -> /shop2

-Trying访问shop2结果403
- 当我从/ shop2中的.htaccess删除RewriteEngine时,首页显示正常,但链接似乎已被破坏。

我对mod_rewrite了解不多,我尝试将RewriteBase / shop2添加到第二个.htaccess文件中,但它失败了。

提前谢谢!

编辑:即使我在根目录中使用RewriteRule .* http://google.de,并删除/ shop2中的.htaccess,我仍然会“禁止”。也许问题不是重写?

EDIT2:当前状态:
.htaccess /

DirectoryIndex index.php

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/media/
RewriteCond %{REQUEST_URI} !^/extAdmin/
RewriteCond %{REQUEST_URI} !^/skin/
RewriteCond %{REQUEST_URI} !^/js/

RewriteCond %{HTTP_HOST} !shop2\.net$ [NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule .* index.php
中的

.htaccess (4个不同的例子)

RewriteRule .* index.php # frontpage shop2.net works, any URLs to be rewritten result in 404
RewriteRule .* shop2/index.php # frontpage shop2.net works, any URLs to be rewritten result in 404
RewriteRule .* http://google.de # frontpage shop2.net works, any URLs to be rewritten result in 404
#RewriteRule .* index.php # shop2.net => forbidden

1 个答案:

答案 0 :(得分:0)

你有虚拟主机的奇怪设置。问题是root中的htaccess是在/ shop2中执行之前执行的。根htaccess重写root中的index.php文件。但是因为shop2.net的document_root是/ shop2,所以index.php文件在document_root之外,所以apache禁止这个(应该这样)。 要解决此问题,请将其放在root htaccess中。

RewriteEngine on
RewriteCond %{HTTP_HOST} !shop2.net$
RewriteCond %{REQUEST_URI} !^/media/
RewriteCond %{REQUEST_URI} !^/extAdmin/
RewriteCond %{REQUEST_URI} !^/skin/
RewriteCond %{REQUEST_URI} !^/js/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule .* index.php

但最好只为shop2创建一个单独的文件夹,而不是shop1的子文件夹