我在理解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标记,它会重定向,因此网址会显示http://localhost.com/eshop/?supplier=[subdomain]&p1=v1...
,但用户仍必须看到http://[subdomain].localhost.com/eshop/?p1=v1...
,现在该如何删除那个被禁止的部分...
(请注意,我的网站实际上位于 www 下的文件夹中,但 eshop 部分将会消失。)
编辑2
IT工作,因为 clmarquart 说我需要mod_proxy。在WAMP上,您必须通过单击托盘图标 - > Apache-> Apache模块启用它,并启用proxy_module和proxy_http_module,无论它们是什么。
答案 0 :(得分:0)
使用“P”标志强制使用内部代理。使用代理模块时,RewriteURL目标必须是完整URL。使用“%1”表示“%9”作为RewriteCond表达式的捕获数据,使用“$ 1”表示“$ 9”作为RewriteRule表达式中捕获的数据。
以下应该更好(不测试)
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^([^./]+)\.localhost\.com$ [NC]
RewriteRule (.+) http://localhost.com/index.php?supplier=%1&$1 [L,P]