[PHP] 'header 301 Moved Permanently' doet vreemd

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • davinci
  • Registratie: Augustus 2000
  • Laatst online: 13-09 18:46

davinci

Super-Grover to the rescue

Topicstarter
Situatie:

Ik heb meerdere domeinen die in Apache alias zijn voor het hoofddomein:
Nu wil ik er graag voor zorgen dat google, e.d. alleen het 'hoofddomein' indexeren:

Ik wil dit zonder mod_rewrite of iets dergelijks doen, dus daarom de volgende oplossing bedacht:

In index.php als eerste dit opgenomen, alle http_hosts die dus ongelijk zijn aan hoofddomein.nl moeten worden geforward.
PHP:
1
2
3
4
5
6
7
8
<?
if (substr($HTTP_HOST, 4)<>"hoofddomein.nl") 
{ 
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.hoofddomein.nl/index.php");
exit;
}
?>


Als ik dan een wget doe:
code:
1
2
3
4
5
6
7
8
9
10
11
12
C:\>wget www.aliasdomein.nl
--11:37:17--  http://www.aliasdomein.nl:80/
           => `index.html.1'
Connecting to www.aliasdomein.nl:80... connected!
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.hoofddomein.nl/index.php [following]
--11:37:17--  http://www.hoofddomein.nl:80/index.php
           => `index.php.1'
Connecting to www.hoofddomein.nl:80... connected!
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.hoofddomein.nl/index.php [following]
http://www.hoofddomein.nl/index.php: Redirection to itself.

Hij redirect dus netjes naar het 'hoofd-domein', echter daarna gaat hij nog een keer 'redirecten'.
Het lijkt wel dat ondanks de 'if' statement, php toch weer die headers wil zenden.
Iemand enig idee hoe dit nu op te lossen?

<removed>


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Maak van "<>" eens "!=" in je if().

[ Voor 40% gewijzigd door AtleX op 05-07-2006 11:51 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

En misschien strpos() === false gebruiken. Dat is vlugger en minder foutgevoelig dan met substr te gaan zitten werken. :)

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • davinci
  • Registratie: Augustus 2000
  • Laatst online: 13-09 18:46

davinci

Super-Grover to the rescue

Topicstarter
!= geeft hetzelfde probleem.

En wat betreft strpos() -> uiteraard, dit was alleen ff een quick and dirty oplossing. Hij redirect nu inderdaad alleen als je www. voor je domein hebt staan.

<removed>


Acties:
  • 0 Henk 'm!

  • davinci
  • Registratie: Augustus 2000
  • Laatst online: 13-09 18:46

davinci

Super-Grover to the rescue

Topicstarter
Voor de volledigheid, hij redirect dus wel. Dit gaat goed!
Hij doet het alleen 2x en ik ben bang dat Google dit niet zo fijn gaat vinden...

Ook het toevoegen van een headers_sent geeft hetzelfde probleem:
PHP:
1
2
3
4
5
6
7
8
9
<?
if (substr($HTTP_HOST, 4)!="hoofddomein.nl") 
{
if (!headers_sent()) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.hoofddomein.nl/index.php");
exit;
}}
?>

[ Voor 50% gewijzigd door davinci op 05-07-2006 12:19 ]

<removed>


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Weet je zeker dat $HTTP_HOST wel iets bevat? Staat register_globals toevallig niet op OFF en moet je dus niet $_SERVER['HTTP_HOST'] gebruiken?
Note overigens dat je bij een 301 header volgens de RFC ook nog een body moet sturen met daarin een link naar de andere locatie - dit voor UA's die redirect headers niet ondersteunen.

[ Voor 40% gewijzigd door crisp op 05-07-2006 12:41 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • davinci
  • Registratie: Augustus 2000
  • Laatst online: 13-09 18:46

davinci

Super-Grover to the rescue

Topicstarter
crisp schreef op woensdag 05 juli 2006 @ 12:40:
Weet je zeker dat $HTTP_HOST wel iets bevat? Staat register_globals toevallig niet op OFF en moet je dus niet $_SERVER['HTTP_HOST'] gebruiken?
Note overigens dat je bij een 301 header volgens de RFC ook nog een body moet sturen met daarin een link naar de andere locatie - dit voor UA's die redirect headers niet ondersteunen.
$HTTP_HOST bevat precies wat hij zou moeten bevatten. De globals staan ON, dus $_SERVER['blabla'] is nvt.
Ik dacht nog heel even dat hij misschien bij de redirect z'n oude $HTTP_HOST meeneemt en niet vult met het nieuwe domein, maar ook dit bleek niet het geval te zijn.

Dank voor het wijzen op het toevoegen van een body!

<removed>


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Je kan toch gewoon alle requests loggen van dat script, en dan gewoon even alle omgevingsvariabelen in een logfiletje schrijven, kan je kijken of hij inderdaad meerdere keren aangeroepen wordt, en vervolgens het probleem isoleren :)

Acties:
  • 0 Henk 'm!

  • davinci
  • Registratie: Augustus 2000
  • Laatst online: 13-09 18:46

davinci

Super-Grover to the rescue

Topicstarter
--MeAngry-- schreef op woensdag 05 juli 2006 @ 11:53:
En misschien strpos() === false gebruiken. Dat is vlugger en minder foutgevoelig dan met substr te gaan zitten werken. :)
En dit bleek idd toch dé oplossing te zijn:
PHP:
1
2
3
4
if (strpos($_SERVER['HTTP_HOST'], 'hoofddomein.nl') === false)
{
//redirect
}

Voor de zekerheid $_SERVER maar toegevoegd, mocht in de toekomst globals weer OFF gezet worden...
dank!

<removed>

Pagina: 1