0

我在我的机器上设置了一个本地 Apache 服务器,并使用了通配符 DNS。我已将其设置为像[foldername].loc. 因此,例如,我的文件夹下htdocs名为MyDomain, 的文件夹将通过mydomain.loc. 这段代码工作正常,我.htaccess在我的代码htdocs如下:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]*\.)?([a-z0-9-]+)\.loc$ [NC]
RewriteCond %3::%{REQUEST_URI} !^(.*?)::/\1/?
RewriteRule (.*) /%3/$1 [PT,QSA]

现在,上面的代码还通过子域,例如“john.mydomain.loc”。现在,我在文件夹中有以下文件夹结构MyDomain

MyDomain
    - active
        - index.php
    - working
        - index.php
    .htaccess

.htaccessof中MyDomain是以下代码:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^live\.mydomain\.loc$ [NC]
RewriteRule ^(.*)$ /active/$1 [L]

如果我理解正确,这应该做的是将http://live.mydomain.loc/其重写为http://mydomain.loc/active/. 请注意,我说的是重写,而不是重定向

但是,使用上面的代码,我在 Apache 错误日志中收到一条消息:

[client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

如果我将.htaccessof更改MyDomain为如下所示:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^live\.mydomain\.loc$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /active/$1 [L]

当我使用此代码时,它总是出现 403 错误,说我没有查看文件夹的权限/mydomain/。如果我设置Options +Indexes,我只看到/mydomain. 那么上面的代码在哪里失败了?

我也试过上面的代码RewriteCond %{REQUEST_URI} !^/active/。这对结果没有影响。

我已经尝试了两天多,但我无法弄清楚。我希望 StackOverflow 的聪明才智可以帮助解决这个问题。:)

4

2 回答 2

1

尝试将重写基础设置为文件实际所在的位置:

RewriteEngine On
RewriteBase /MyDomain/
RewriteCond %{HTTP_HOST} ^live\.mydomain\.loc$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ active/$1 [L]

并制作/active/相对:active/

于 2013-05-05T17:09:21.413 回答
0

我使用下面的代码解决了这个问题:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^live\.mydomain\.loc$ [NC]
RewriteCond %{REQUEST_URI} !^/mydomain/active/
RewriteRule ^(.*)$ active/$1 [L]

主要修复是RewriteCond %{REQUEST_URI} !^/mydomain/active/. 不同之处在于,我尝试的第一行RewriteCond %{REQUEST_URI} !^/active, 将匹配/access/index.php,但不匹配/mydomain/active/index.php

我希望这对其他人有帮助。

于 2013-05-06T11:51:44.543 回答