2011-04-26 97 views
0

我有理解htaccess的重定向如何工作的问题:htaccess的子域脚本重定向

我可以做一个背景重定向,从而使用户看到[subdomain].mydomain.com/?p1=v1...,但服务器没有实际的重定向,只有服务器端提供mydomain.com/?sid=[subdomain]&p1=v1...

这是我迄今为止,它不工作:

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^([^./]+)\.localhost\.com/(.+) [NC] 
RewriteRule (.+) localhost.com/index.php?supplier=$1&$2 [L] 

我不会改变任何东西。

编辑

我得到了这个工作中间:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^([^./]+)\.localhost\.com$ [NC] 
RewriteRule /(.+)$ http://localhost\.com/eshop/?supplier=%1 [QSA,P] 

现在我得到一个不错的禁止警告,如果删除标志P,它会重新定向,所以URL显示http://localhost.com/eshop/?supplier=[subdomain]&p1=v1...喜欢它应该,但用户仍然必须看到http://[subdomain].localhost.com/eshop/?p1=v1...,现在如何删除该禁止部分...

(注意我的网站实际上是在下的文件夹www,但eshop部分将消失)。

EDIT 2

它的作品,从而clmarquart说我需要mod_proxy的。在WAMP上,您必须通过单击托盘图标 - > Apache-> Apache模块启用它,并启用proxy_module和proxy_http_module,无论它们是什么。

+2

为了使用'[P]'标志,你需要启用'mod_proxy'。否则,你有什么应该工作。 – clmarquart 2011-04-26 13:18:31

+0

那是什么?我如何检查WAMP? – Solenoid 2011-04-26 13:22:23

+1

模块在'conf/httpd.conf'文件中启用。您需要确保您的托管服务提供商也启用了它。启用apache模块应显示在phpinfo页面以及'<?php phpinfo(); ?>' – clmarquart 2011-04-26 13:27:49

回答

0

使用“P”标志强制使用内部代理。使用代理模块时,RewriteURL目标必须是完整的URL。从RewriteCond表达式中使用“%1”到“%9”作为捕获的数据,从RewriteRule表达式中捕获的数据使用“$ 1”到“$ 9”。

下应该更好地工作(尽管未测试)

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^([^./]+)\.localhost\.com$ [NC] 
RewriteRule (.+) http://localhost.com/index.php?supplier=%1&$1 [L,P] 
+0

我想用$ _GET获得[subdomain]部分,是否有可能?既然它在内部重定向,我会认为是......你给我的东西不行,不过我还在砸我的键盘,看看我是否奇迹般地让它工作。目前我收到了一个错误的链接错误。还有什么在这里(。+)的RewriteRule? – Solenoid 2011-04-26 12:36:11

+0

%1会给你子域名。 $ 1会给你RewriteRule的(。+)捕获 – qbert220 2011-04-26 14:35:09