ugrás a tartalomhoz

HTTP Referer

sleepyt · 2009. Nov. 30. (H), 16.26
Sziasztok,

a minap elkészítettem a weboldalamat, három különböző nyelven, és megvettem hozzá a három különböző domain-t. Arra keresem a választ hogy tudom, a három különböző domain címet a három különböző nyelvi változatra irányítani?

Saját webszervem van, egy tárhely, és egy adatbázis. A nyelvi változatokat adatbázisban tárolom és "index.php?lang=de"-ban található de-en-hu parancsokra jönnek elő. A három domain cím már a tárhelyemre mutat, nagyon sokat keresgéltem és sajnos sehol nem találtam épkézláb infót az ilyesféle http referer átirányításokról.
Nekem csak annyi kell hogy a három külöböző domain-re ez a három különböző url jöjjön be.

Segítségeteket előre is köszönöm!
 
1

htaccess, vhost

gphilip · 2009. Nov. 30. (H), 19.07
Hali!

A legszebb megoldás az, ha mindegyik domainra felállÍtasz egy VirtualHost-ot az Apache-ban, majd környezeti változóként adod hozzá a nyelvet jelölő változót a scripthez.

Apacha konfigba ilyesmit:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName www.magyardomain.hu
ServerAlias *.magyardomain.hu
SetEnv lang hu
</VirtualHost>

<VirtualHost *:80>
ServerName www.angoldomain.co.uk
ServerAlias *.angoldomain.co.uk
SetEnv lang en
</VirtualHost>

<VirtualHost *:80>
ServerName www.nemetdomain.de
ServerAlias *.nemetdomain.de
SetEnv lang de
</VirtualHost>


Ezek után a PHP-ból a $_ENV['lang'] környezeti változóból eléreted, hogy melyik nyelvről van szó.

Van htaccess-es megoldás, ha nincs hozzáférésed a szerverhez. Ezt msot nem Írom meg, ha mégis kellene, szólj.
2

Köszi

sleepyt · 2009. Dec. 1. (K), 09.05
Köszönöm szépen a válaszod. Teljesen jól működik.
3

NameVirtualHost

vbence · 2009. Dec. 1. (K), 10.49
NameVirtualHost *:80

<VirtualHost *:80>
ServerName magyardomain.hu
ServerAlias *.magyardomain.hu
ServerAlias *.angoldomain.co.uk
ServerAlias *.nemetdomain.de
</VirtualHost>
... és $_SERVER["HTTP_HOST"]
4

Mégegy megoldás

sleepyt · 2009. Dec. 1. (K), 11.21
Sziasztok, az előző gphilip válasza teljesen jól működik, de gondolkodtam azon hogyan lehetne megoldani hogy ne kelljen apache-ba belenyúlni, és simán php-ban megírni.
A scriptem hótegyszerű fapados technikát alkalmaz, de segítséget nyújthat ha valaki csak bérel tárhylet.


<?php
$domain = $_SERVER['HTTP_HOST']; // az url-t lekérdezve egyenlővé teszem a $domain változóval

if ( $domain == "www.domaincím.hu" ) //alapeset, ha .hu-ra végződik
{
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.domaincím.hu/index.php?lang=hu\">";
}
elseif ( $domain == "domaincím.hu" )  //www nélküli változás
{
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.domaincím.hu/index.php?lang=hu\">";
}
elseif ( $domain == "www.domaincím.de" ) // német domain
{
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.domaincím.de/index.php?lang=de\">";
}
elseif ( $domain == "domaincím.de" ) // www nélküli német domain
{
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://domaincím.de/index.php?lang=de\">";
}
elseif ( $domain == "www.domaincím.com" ) // angol domain
{
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.domaincím.com/index.php?lang=en\">";
}
elseif ( $domain == "domaincím.com" ) // www nélküli angol domain
{
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://domaincím.com/index.php?lang=en\">";
}
else // határeset ha semminek nem felel meg, akkor alapeset azaz magyar
{
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.domaincím.hu/index.php?lang=hu\">";
}
?>


Nekem működik, tudom a kód igen egyszerű de véleményem szerint használható, ha ezt egy index.html-be tesszük be a gyökérkönytárba.
5

META?

Poetro · 2009. Dec. 1. (K), 14.03
<meta> elemmel nem irányítunk át semmit, arra valók a HTTP fejlécek. Ebben az esetben 301-307 HTTP kódok valamelyikét kellene visszaadni. Például:
header('Location: http://example.com/index.php?lang=hu', TRUE, 301);
6

WTF

gphilip · 2009. Dec. 1. (K), 15.58
hát... megyünk szépen a csúnya megoldások felé :)
muszáj a látogató orra alá dörgölni minden esetben egy URL paramétert? Miért? A keresők sem szeretik.

Nem is beszélve arról, hogy ha Így teszel, akkor 2 további opciód van:
1. url rewrite-tal minden url végébe odabiggyeszted a lang paramétert
2. session-ben tárolod a választott nyelvet

Egyik sem kiemelkedő megoldás.

Nem is beszélve arról, hogy mi a fenének adunk át egy lang paramétert egy újabb request-nek, amikor tudjuk az értéket már az elsőben is?

Ha már semmiképpen sem apache konfig, akkor:

<?php
	switch ( $_SERVER['HTTP_HOST'] )
	{
		case "www.magyar.hu":
		case "magyar.hu":
			$lang = "hu";
			break;
		case "www.nemet.de":
		case "nemet.de":
			$lang = "de";
			break;
		case "www.angol.com":
		case "angol.com":
			$lang = "en";
			break;
		default:
			$lang = "hu";
	}
?>
A dispatcherben vagy front controllerben vagy valahol elfér ez a kód, ha már... esetleg közvetlenül Írható a $_GET tömb is, ha túl sok helyre van hardcode-olva.

Mellesleg a www-s és www nélküli host-ok közül illik választani egy kitüntetettet és a másikat átirányÍtani erre 301-gyel, pl Így:
http://snippets.dzone.com/posts/show/2264