Php 如何在不更改URL的情况下通过htaccess重定向?
我目前正在使用下面的代码将所有子域指向它们的文档根Php 如何在不更改URL的情况下通过htaccess重定向?,php,apache,.htaccess,redirect,mod-rewrite,Php,Apache,.htaccess,Redirect,Mod Rewrite,我目前正在使用下面的代码将所有子域指向它们的文档根 RewriteCond %{HTTP_HOST} ^(.*)\.example\.co [NC] RewriteRule ^(.*)/?$ http://example.co/%1/$1 [P] subdomain.example.co将指向example.co/subdomain,但URL将保持不变 问题是,当您试图通过PHP检索URL时,它总是返回example.co/subdomain,尽管URL栏将其显示为子域。我相信这是由于代理标志
RewriteCond %{HTTP_HOST} ^(.*)\.example\.co [NC]
RewriteRule ^(.*)/?$ http://example.co/%1/$1 [P]
subdomain.example.co
将指向example.co/subdomain
,但URL将保持不变
问题是,当您试图通过PHP检索URL时,它总是返回example.co/subdomain
,尽管URL栏将其显示为子域。我相信这是由于代理标志
如何实现相同的效果,但允许检索用户所在的实际URL(子域)
总体
- allsubdomains.example.co应指向example.co/allsubdomains
- URL应保持为allsubdomains.example.co
- 当通过PHP检索当前URL时,它应该返回allsubdomains.example.co
http://example.co/subdomain/foo
,是您让Apache这么做的。因此Apache成为新请求中的客户机,服务器当然会看到http://example.co/subdomain/foo
作为请求URL-因为这就是发生的情况。假设这一切都发生在同一台服务器上,您根本不想代理请求,只想在内部重写它;像RewriteRule^(.*)$/%1/$1
@CBroe嘿,谢谢你的回复!出于某种原因,我只是在使用重写规则时指向了一个错误页面,而不是指向具有相同URL的example.co
,这可能是由于无休止的重定向。由于您现在正在内部重写,因此主机名在下一轮开始时不会更改。因此,您可能需要添加另一个条件,以检查路径是否已以您的一个子域名开始。如果这是不可能的,因为太多了,那么你将不得不找到另一种方法来检测它。@CBroe我刚刚使用测试了这个。我认为它现在返回一个错误,因为它没有指向任何东西。我唯一的重定向是http到https(以及当前无法使用的重定向)@CBroe似乎指向子域.example.co/subdomain
,而不是example.co/subdomain