【发布时间】:2013-01-26 03:34:30
【问题描述】:
mod_rewrite 的问题
当谈到 Apache 的 mod_rewrite 时,我遇到的麻烦比我想象的要多。我已经发布了一个问题
问题,这已得到澄清,但我继续收到错误,我看不到任何逻辑错误
配置。任何帮助将不胜感激!
我使用的.htaccess如下:
# Begin Rewrite Module for http://*.example.com/
# ==============================================
<IfModule mod_rewrite.c>
# Turn the rewrite engine on and set the base path.
RewriteEngine On
RewriteBase /
# Map subdomains to their respective directories.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com$ [NC]
RewriteRule ^(.*)$ public_subdomains/%1/$1 [L]
</IfModule>
这不起作用,因为内部重定向太多,导致500 Internal Server Error - 这是它的调试日志:
[Fri Feb 15 16:49:30.318509 2013] [core:error] [pid 2316:tid 1708] [client 127.0.0.1:9141] AH00124: 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.
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3502): [client 127.0.0.1:9141] AH00121: r->uri = /public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/index.php
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3508): [client 127.0.0.1:9141] AH00122: redirected from r->uri = /public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/index.php
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3508): [client 127.0.0.1:9141] AH00122: redirected from r->uri = /public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/index.php
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3508): [client 127.0.0.1:9141] AH00122: redirected from r->uri = /public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/index.php
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3508): [client 127.0.0.1:9141] AH00122: redirected from r->uri = /public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/index.php
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3508): [client 127.0.0.1:9141] AH00122: redirected from r->uri = /public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/index.php
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3508): [client 127.0.0.1:9141] AH00122: redirected from r->uri = /public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/index.php
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3508): [client 127.0.0.1:9141] AH00122: redirected from r->uri = /public_subdomains/sub1/public_subdomains/sub1/public_subdomains/sub1/index.php
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3508): [client 127.0.0.1:9141] AH00122: redirected from r->uri = /public_subdomains/sub1/public_subdomains/sub1/index.php
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3508): [client 127.0.0.1:9141] AH00122: redirected from r->uri = /public_subdomains/sub1/index.php
[Fri Feb 15 16:49:30.318509 2013] [core:debug] [pid 2316:tid 1708] core.c(3508): [client 127.0.0.1:9141] AH00122: redirected from r->uri = /
我找到了一种解决方案,通过将 [L] 标志替换为 RewriteRule 上的 [END] 标志,它完美地将请求 URI 映射到子域目录中的相应文件。
不幸的是,它运行得太完美了。对 subdomain.example.com/folder/ 的调用会在不考虑 DirectoryIndex 的情况下内部重写为 example.com/public_subdomains/subdomain/folder/,此时它应该重写为 example.com/public_subdomains/subdomain/folder/index.php(假设 index.php 设置为 DirectoryIndex)。
如果有人能帮助我阐明这一点,我将永远感激不尽!
【问题讨论】:
-
我认为您将 URL 与系统路径混合在一起。这个
http://example.com/index.php和这个/public_html/index.php指向同一个文件。在 .htaccess 文件中,PT 标志是隐含的,并且只能使用 URL。也许您的问题中还有其他问题,但这个问题非常明显。 -
我已编辑问题以从示例重写列表中删除
/public_html,但不,不使用系统路径。所有路径都相对于文档根目录(这是我从之前的问题中解决的问题)。但是指出系统路径和 URL 之间的区别是值得称赞的 - 我花了几天时间试图理解这个问题! -
您是否尝试过至少 RewrteLogLevel 3 的 RewriteLog?这可以帮助您调试。我的事情,可能有问题:
RewriteRule (.*) public_subdomains/%1/$1 [L]但是 RewriteLog 告诉你更多。 -
请说明您是否希望重定向 URI 为
http://example.com/public_subdomains/subdomain/folder/index.php或http://subdomain.example.com/public_subdomains/subdomain/folder/index.php?
标签: .htaccess mod-rewrite subdomain