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 部分将会消失)。
编辑2
它可以工作,所以正如clmarquart所说我需要mod_proxy。在 WAMP 上,您必须通过单击托盘图标 -> Apache -> Apache 模块来启用它,我启用了 proxy_module 和 proxy_http_module,无论它们是什么。
I'm having problems understanding how htaccess redirects work:
Can I do a background redirect, so that the user sees [subdomain].mydomain.com/?p1=v1...
, but the server delivers mydomain.com/?sid=[subdomain]&p1=v1...
without actual redirection, only server side.
This is what I have so far, it doesn't work:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^([^./]+)\.localhost\.com/(.+) [NC]
RewriteRule (.+) localhost.com/index.php?supplier=$1&$2 [L]
I doesn't change anything.
Edit
I got this halfway working:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^([^./]+)\.localhost\.com$ [NC]
RewriteRule /(.+)$ http://localhost\.com/eshop/?supplier=%1 [QSA,P]
Now I get a nice forbidden warning, if I remove the P flag it'll redirect, so the URL shows http://localhost.com/eshop/?supplier=[subdomain]&p1=v1...
like it should, but the user must still see http://[subdomain].localhost.com/eshop/?p1=v1...
, now how the remove that forbidden part...
(Notice my website is actually in a folder under www, but the eshop part will go away).
EDIT 2
IT WORKS, so as clmarquart said I needed mod_proxy. On WAMP you have to enable it by clicking on the tray icon->Apache->Apache modules and I enabled proxy_module and proxy_http_module, whatever they are.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用“P”标志强制使用内部代理。使用代理模块时,RewriteURL 目标必须是完整 URL。使用“%1”到“%9”作为从 RewriteCond 表达式捕获的数据,使用“$1”到“$9”作为从 RewriteRule 表达式捕获的数据。
以下应该可以更好地工作(尽管未经测试)
Use the "P" flag to force use of the internal proxy. The RewriteURL target must be a full URL when using the proxy module. Use "%1" to "%9" as the captured data from the RewriteCond expression, and "$1" to "$9" for the captured data from the RewriteRule expression.
The following should work better (not tested though)