2011-08-10 37 views
2

我想將我的所有子域映射到文件夾。
例如subdomain.domain.com應顯示domain.com/clients/subdmain(透)的含量子域到使用Apache mod_rewrite相關的文件夾問題

RewriteCond %{HTTP_HOST} ^(.+)\.oomail\.org 
RewriteCond %{HTTP_HOST} !^www\.oomail\.org [NC] 
RewriteRule ^(.+)$ /var/www/clients/%1/$1 

我得到了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 

然後我創建了轉儲$ _GET變量細節details.php文件。其內容是

<pre> 
<?php 
var_dump($_GET); 
?> 
</pre> 

和修改重寫規則來(注:我送$ 1%1到details.php足見其內容)打開http://subdomain.oomail.org/file.html

RewriteRule ^(.+)$ details.php?p=%1&d=$1 

而且,我得到了輸出作爲

array(2) { 
    ["p"]=> 
    string(9) "subdomain" 
    ["d"]=> 
    string(11) "details.php" 
} 

其中可變p是正確的,這是「SU(%1值) bdomain「,但是d(1美元的價值)是我期待的file.html這是我在URL中打開的details.php。我哪裏錯了?或者我如何獲取file.html(URI)映射變量?

回答

5

使用此規則:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/clients/ 
RewriteCond %{HTTP_HOST} ^(.+)\.oomail\.org 
RewriteCond %{HTTP_HOST} !^www\.oomail\.org 
RewriteRule ^(.*)$ /clients/%1/$1 [L] 

在你的第一次嘗試,你有無盡的重寫循環這阿帕奇不得不中斷(默認情況下不超過10次迭代)。在第二次嘗試中,你正面臨有限的重寫循環(我相信2次迭代)。這就是mod_rewrite的工作方式,您應該在規則中計算這種可能性 - 尤其是當您使用.*作爲匹配模式時。

我的規則中的第一個條件將防止重寫循環的發生(意味着規則只會在第一次迭代時起作用)。不幸的是,這意味着一些限制:原始URL 不能開始於/clients/。例如:此URL不會被重定向:http://something.example.com/clients/hello-kitten.php

解決方案 - 重命名文件夾clients的東西更獨特:例如_clients_folder_(你將不得不改變重寫規則該文件夾以及,很明顯)。

看的東西:RewriteRule Last [L] flag not working?

相關問題