子域到文件夹使用Apache mod_重写相关问题

子域到文件夹使用Apache mod_重写相关问题,apache,mod-rewrite,subdomain,subdirectory,Apache,Mod Rewrite,Subdomain,Subdirectory,我想将我的所有子域映射到文件夹。 例如subdomain.domain.com应该显示domain.com/clients/subdmain的内容(透明) 我得到500个内部服务器错误。为了检查问题所在,我附加了[R]标志 RewriteRule ^(.+)$ /var/www/clients/%1/$1 [R] 我在地址栏中得到了这个结果 http://q1.oomail.org/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1

我想将我的所有子域映射到文件夹。
例如subdomain.domain.com应该显示domain.com/clients/subdmain的内容(透明)

我得到500个内部服务器错误。为了检查问题所在,我附加了[R]标志

RewriteRule ^(.+)$ /var/www/clients/%1/$1 [R]
我在地址栏中得到了这个结果

http://q1.oomail.org/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/always.html
然后我创建了一个details.php文件,该文件转储$\u GET变量details。其内容是

打开
http://subdomain.oomail.org/file.html
,我得到的输出为

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/clients/
RewriteCond %{HTTP_HOST} ^(.+)\.oomail\.org
RewriteCond %{HTTP_HOST} !^www\.oomail\.org
RewriteRule ^(.*)$ /clients/%1/$1 [L]
其中变量p是正确的(值%1),它是“子域”,但d(值$1)是details.php,我希望它是我在URL中打开的file.html。我哪里做错了?或者如何将file.html(URI)提取到变量中进行映射?

使用以下规则:

在您的第一次尝试中,您有无休止的重写循环,Apache必须中断该循环(默认情况下不超过10次迭代)。在第二次尝试中,您将面临有限的重写循环(我相信是2次迭代)。这就是mod_rewrite的工作原理,您应该在规则中考虑这种可能性——特别是当您使用
*
作为匹配模式时

我的规则中的第一个条件将阻止重写循环的发生(意味着规则将只在第一次迭代中工作)。不幸的是,这意味着一些限制:原始URL不能以
/clients/
开头。例如:此URL将不会被重定向:
http://something.example.com/clients/hello-kitten.php

解决方案——将
客户端
文件夹重命名为更独特的文件夹:例如
\u clients\u folder
(显然,您还必须在重写规则中更改该文件夹)

要读的东西:

<pre>
<?php
var_dump($_GET);
?>
</pre>
RewriteRule ^(.+)$ details.php?p=%1&d=$1
array(2) {
  ["p"]=>
  string(9) "subdomain"
  ["d"]=>
  string(11) "details.php"
}
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/clients/
RewriteCond %{HTTP_HOST} ^(.+)\.oomail\.org
RewriteCond %{HTTP_HOST} !^www\.oomail\.org
RewriteRule ^(.*)$ /clients/%1/$1 [L]