Windows에서 현재 페이지의 전체 URL을 얻으려면 어떻게 해야 합니까?

WordPress 설치를 Windows의 새 폴더로 이동했습니다.IIS 서버301개의 리다이렉트를 PHP로 설정하고 있습니다만, 동작하지 않는 것 같습니다.투고 URL 의 형식은 다음과 같습니다.

http:://www.example.com/OLD_FOLDER/index.php/post-title/ 

어떻게 잡는지 모르겠어/post-title/URL의 일부입니다.

$_SERVER["REQUEST_URI"]– 모두가 추천하는 것처럼 보이는 – 빈 문자열을 반환하는 것입니다. $_SERVER["PHP_SELF"]이제 막 돌아온 참이다index.php이유는 무엇입니까? 어떻게 수정하면 됩니까?



질문에 대한 답변



아마도, 당신이 IIS에 있기 때문에,

$_SERVER['PATH_INFO'] 

설명에 사용한 URL에 근거해, 원하는 것을 지정합니다.

Apache의 경우,$_SERVER['REQUEST_URI'].




$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; }
else
{
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; 



Apache의 경우:

'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] 


를 사용할 수도 있습니다.HTTP_HOST대신SERVER_NAME허먼이 말한대로요자세한 내용은 이 관련 질문을 참조하십시오.요컨대, 당신은 어느쪽이라도 사용할 수 있을 것입니다.호스트 버전은 다음과 같습니다.

'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] 


편집증 환자용 / 중요한 이유

일반적으로, 저는ServerName에서VirtualHost웹사이트의 정식 형식이 되고 싶거든요$_SERVER['HTTP_HOST']는 요청 헤더에 따라 설정됩니다.서버가 그 IP 주소의 도메인 이름 중 하나 또는 모든 것에 응답하면, 유저가 헤더를 스푸핑 하거나, 혹은 보다 나쁜 것은, DNS 레코드를 IP 주소로 포인트 해, 서버/웹 사이트가 잘못된 URL 에 구축된 다이나믹 링크를 가지는 Web 사이트를 제공할 가능성이 있습니다.후자의 방법을 사용하는 경우는, 유저도 설정할 필요가 있습니다.vhost또는 셋업할 수 있습니다..htaccess다음과 같이 서비스를 제공할 도메인을 강제 적용하는 규칙입니다.

RewriteEngine On RewriteCond %{HTTP_HOST} !(^stackoverflow.com*)$ RewriteRule (.*) https://stackoverflow.com/$1 [R=301,L] #sometimes u may need to omit this slash ^ depending on your server 

도움이 됐으면 좋겠다.이 답변의 요점은 apache를 사용하여 완전한 URL을 얻을 수 있는 방법을 찾을 때 여기에 오게 된 사람들에게 코드 첫 줄을 제공하는 것이었습니다.




$_SERVER['REQUEST_URI']IIS 에서는 동작하지 않지만, http://neosmart.net/blog/2006/100-apache-compliant-request_uri-for-iis-and-windows/ 에서는 유망하다고 생각됩니다.




이 클래스를 사용하여 URL 작업을 가져옵니다.

class VirtualDirectory {
var $protocol;
var $site;
var $thisfile;
var $real_directories;
var $num_of_real_directories;
var $virtual_directories = array();
var $num_of_virtual_directories = array();
var $baseURL;
var $thisURL;
function VirtualDirectory()
{
$this->protocol = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http';
$this->site = $this->protocol . '://' . $_SERVER['HTTP_HOST'];
$this->thisfile = basename($_SERVER['SCRIPT_FILENAME']);
$this->real_directories = $this->cleanUp(explode("/", str_replace($this->thisfile, "", $_SERVER['PHP_SELF'])));
$this->num_of_real_directories = count($this->real_directories);
$this->virtual_directories = array_diff($this->cleanUp(explode("/", str_replace($this->thisfile, "", $_SERVER['REQUEST_URI']))),$this->real_directories);
$this->num_of_virtual_directories = count($this->virtual_directories);
$this->baseURL = $this->site . "/" . implode("/", $this->real_directories) . "/";
$this->thisURL = $this->baseURL . implode("/", $this->virtual_directories) . "/";
}
function cleanUp($array)
{
$cleaned_array = array();
foreach($array as $key => $value)
{
 $qpos = strpos($value, "?");
 if($qpos !== false)
 {

break;
 }
 if($key != "" && $value != "")
 {

$cleaned_array[] = $value;
 }
}
return $cleaned_array;
} }
$virdir = new VirtualDirectory(); echo $virdir->thisURL;