Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在不更改URL的情况下通过htaccess重定向?_Php_Apache_.htaccess_Redirect_Mod Rewrite - Fatal编程技术网

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