2013-03-18 53 views
0

我正在本地項目中使用vHosts進行一些測試。我已經設法創建一個重寫規則來重定向something.kensaku.comwww.kensakuapp.com/something,但我想重定向something.kensaku.com/myappwww.kensakuapp.com/something/myapp嘗試使用RewriteRule匹配子域和路徑,只獲取子域

我重寫規則是這樣的一個:

Options +FollowSymLinks 

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^(^.*)\.kensaku.com 
RewriteRule ^(^.*) goto.php?username=%1&path=$1 

我一直在嘗試了好幾個小時,我仍然不能設法得到/myapp部分。如果我去something.kensaku.com/myapp$1將匹配goto.php,但不應該匹配/myapp

這裏的goto.php腳本我使用重定向的內容:

<?php 
$user = $_GET['username']; 
header("Location: http://www.kensakuapp.com/$user/".$_GET['path']); 
?> 

如果有其他的方法可以做到這一點,而不使用PHP,我會感激知道 - 但如果可能的話我d喜歡繼續使用PHP方法,因爲將來也許我會爲它添加跟蹤或日誌記錄功能。

如果我錯過了任何問題,請告訴我!

編輯:日誌中的rewritemod,跟蹤3:

[Wed Mar 20 19:26:28.624291 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7d120/initial] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/ 
[Wed Mar 20 19:26:28.624352 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.html 
[Wed Mar 20 19:26:28.624402 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.html.var 
[Wed Mar 20 19:26:28.624434 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.php 
[Wed Mar 20 19:26:28.630172 2013] [rewrite:trace3] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7f2f0/initial] [perdir /opt/lampp/htdocs/kensaku/] strip per-dir prefix: /opt/lampp/htdocs/kensaku/ -> 
[Wed Mar 20 19:26:28.630202 2013] [rewrite:trace3] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7f2f0/initial] [perdir /opt/lampp/htdocs/kensaku/] applying pattern '^.+$' to uri '' 
[Wed Mar 20 19:26:28.630216 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7f2f0/initial] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/ 
[Wed Mar 20 19:26:28.630277 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.html 
[Wed Mar 20 19:26:28.630327 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.html.var 
[Wed Mar 20 19:26:28.630360 2013] [rewrite:trace1] [pid 24190] mod_rewrite.c(467): [client 127.0.0.1:52996] 127.0.0.1 - - [www.kensaku.com/sid#982bb28][rid#9a7b118/subreq] [perdir /opt/lampp/htdocs/kensaku/] pass through /opt/lampp/htdocs/kensaku/index.php 

編輯2:這裏是虛擬主機:

# Kensaku Domains 
<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /opt/lampp/htdocs/kensaku 
    ServerName kensaku.com 
    ServerAlias *.kensaku.com 
</VirtualHost> 
<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot /opt/lampp/htdocs/kensakuapp 
    ServerName kensakuapp.com 
    ServerAlias *.kensakuapp.com 
</VirtualHost> 
+0

使用「RewriteLog」和「RewriteLogLevel」啓用日誌記錄併發布相關日誌。 – larsks 2013-03-18 19:48:57

+0

日誌已經被採取使用奧拉夫的規則,試圖去'www.kensaku.com'。 – 2013-03-20 18:30:01

回答

2

你不需要在這裏PHP。

只要捕獲所需的零件在RewriteCondRewriteRule和替代

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.+?)\.kensaku\.com$ 
RewriteRule ^.*$ http://www.kensakuapp.com/%1/$0 [R,L] 

這捕獲something中的RewriteCond在%1myapp$0的重寫規則中使用它們。

+0

由於'www.kensaku.com'也應該重定向到'kensakuapp.com/www',我可以刪除第一個RewriteCond,不是嗎? – 2013-03-19 19:09:28

+0

此外它不會工作 - 去'www.kensaku.com'給了我一個重定向循環錯誤... – 2013-03-19 19:13:24

+0

是你的第一個評論。我再次測試了一遍,'olaf.kensaku.com/test'重定向到'www.kensakuapp.com/oracle/test',與'www.kensaku.com/tast'一樣,它重定向到'www.kensakuapp.com/ WWW/tast'。這裏沒有循環。您的.htaccess或服務器配置中是否有其他規則,這可能導致此問題? – 2013-03-19 20:21:04

1

沒有看到你的日誌,我不能完全肯定,但我的第一個猜測是,您需要將傳遞標誌([PT])添加到您的規則中:

RewriteRule ^(.*) /goto.php?username=%1&path=$1 [PT] 

除了PT標誌,我已經刪除規則中的錯誤雙^和我所做的路徑goto.php明確(可能或不要求,但可能是很好的做法)。關於PT標誌,從mod_rewrite文檔記住這一點:

默認情況下,mod_rewrite的一個URL映射到一個文件系統路徑。

您的重寫目標(goto.php?...)不是文件系統路徑,因此您需要由Apache進一步處理它。該passthrough標誌就是做這個的:

力所產生的URI被傳遞迴其他URI到文件名翻譯,如別名或重定向的處理的URL映射引擎。

如果這沒有解決不了的事情,發表您的日誌的要求,我們可以仔細看看

+0

添加日誌到問題... – 2013-03-20 18:27:41