Mudei uma instalação do WordPress para uma nova pasta em um servidor Windows / IIS . Estou configurando 301 redirecionamentos em PHP, mas não parece estar funcionando. Meus URLs de postagem têm o seguinte formato:
http:://www.example.com/OLD_FOLDER/index.php/post-title/
Não consigo descobrir como pegar a /post-title/
parte da URL.
$_SERVER["REQUEST_URI"]
- que todo mundo parece recomendar - está retornando uma string vazia. $_SERVER["PHP_SELF"]
está apenas voltando index.php
. Por que isso e como posso corrigi-lo?
Respostas:
Talvez, porque você esteja no IIS,
é o que você deseja, com base nos URLs usados para explicar.
Para o Apache, você usaria
$_SERVER['REQUEST_URI']
.fonte
Notice: Undefined index: PATH_INFO in /home/tdpk/public_html/system/config.php on line 14
fonte
Para o Apache:
Você também pode usar em
HTTP_HOST
vez deSERVER_NAME
como Herman comentou. Veja esta pergunta relacionada para uma discussão completa. Em suma, você provavelmente está bem em usar qualquer um. Aqui está a versão 'host':Para os paranóicos / por que é importante
Normalmente, defino
ServerName
noVirtualHost
porque quero que essa seja a forma canônica do site. O$_SERVER['HTTP_HOST']
é definido com base nos cabeçalhos da solicitação. Se o servidor responder a qualquer / todos os nomes de domínio nesse endereço IP, um usuário poderá falsificar o cabeçalho, ou pior, alguém poderá apontar um registro DNS para o seu endereço IP e, em seguida, seu servidor / site estará disponibilizando um site com dinâmica links criados em um URL incorreto. Se você usar o último método, também deverá configurarvhost
ou definir uma.htaccess
regra para impor o domínio que deseja exibir, algo como:Espero que ajude. O ponto real desta resposta era apenas fornecer a primeira linha de código para as pessoas que acabaram aqui quando procuravam uma maneira de obter o URL completo com o apache :)
fonte
$_SERVER['HTTP_HOST']
vez de$_SERVER['SERVER_NAME']
. Se houver uma configuração de host virtual, SERVER_NAME mostrará esse nome. Pode ser algo parecido*.example.com
que não é válido.$_SERVER['REQUEST_URI']
não funciona no IIS, mas achei o seguinte: http://neosmart.net/blog/2006/100-apache-compliant-request_uri-for-iis-and-windows/, que parece promissor.fonte
Use esta classe para fazer com que a URL funcione.
fonte
Adicionar:
Em seguida, basta chamar a
my_url
função.fonte
Eu uso a seguinte função para obter o URL completo atual. Isso deve funcionar no IIS e no Apache.
fonte
$query = isset($_SERVER['argv']) ? substr($_SERVER['argv'][0], strpos($_SERVER['argv'][0], ';') + 1) : '';
. Atualizei sua resposta para incluir isso.REQUEST_URI é definido pelo Apache, portanto você não o obterá com o IIS. Tente fazer um var_dump ou print_r em $ _SERVER e veja quais valores existem lá que você pode usar.
fonte
A parte pós-título da URL é posterior ao seu
index.php
arquivo, que é uma maneira comum de fornecer URLs amigáveis sem usar mod_rewrite. O posttitle é, portanto, parte da string de consulta; portanto, você poderá obtê-lo usando $ _SERVER ['QUERY_STRING']fonte
Use a seguinte linha na parte superior da página PHP onde você está usando
$_SERVER['REQUEST_URI']
. Isso resolverá seu problema.fonte
Oh, a diversão de um trecho!
Tem retornos bonitos como:
fonte
Todo mundo esqueceu http_build_url ?
Quando nenhum parâmetro é passado,
http_build_url
ele assume automaticamente o URL atual. Eu esperariaREQUEST_URI
ser incluído também, embora pareça ser necessário para incluir os parâmetros GET.O exemplo acima retornará URL completo.
fonte
Usei o código a seguir e estou obtendo o resultado certo ...
fonte
No meu servidor apache, isso me dá a URL completa no formato exato que você está procurando:
fonte
Suporte a proxy reverso!
Algo um pouco mais robusto. Nota Funcionará apenas em
5.3
ou superior.fonte