Access-Control-Allow-Origin Wiele Domen Pochodzenia?

Czy istnieje sposób, aby zezwolić na wiele cross-domen za pomocą nagłówka Access-Control-Allow-Origin?

Wiem o *, ale jest zbyt otwarta. Naprawdę chcę zezwolić tylko na kilka domen.

Jako przykład, coś takiego:

Access-Control-Allow-Origin: http://domain1.example, http://domain2.example

Wypróbowałem powyższy kod, ale wydaje się, że nie działa w Firefoksie.

Czy można określić wiele domen, czy utknąłem tylko z jedną?

Author: Patrick Mevzek, 2009-10-31

26 answers

Wygląda na to, że zalecanym sposobem na to jest, aby twój serwer odczytał nagłówek Origin od klienta, porównał go z listą domen, na które chcesz zezwolić, i jeśli pasuje, odeślij wartość nagłówka Origin z powrotem do klienta jako nagłówek Access-Control-Allow-Origin w odpowiedzi.

Z .htaccess możesz to zrobić tak:

# ----------------------------------------------------------------------
# Allow loading of external fonts
# ----------------------------------------------------------------------
<FilesMatch "\.(ttf|otf|eot|woff)$">
    <IfModule mod_headers.c>
        SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.example|dev02.otherdomain.example)$" AccessControlAllowOrigin=$0
        Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        Header merge Vary Origin
    </IfModule>
</FilesMatch>
 741
Author: yesthatguy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-13 08:29:21

Inne rozwiązanie, którego używam w PHP:

$http_origin = $_SERVER['HTTP_ORIGIN'];

if ($http_origin == "http://www.domain1.com" || $http_origin == "http://www.domain2.com" || $http_origin == "http://www.domain3.com")
{  
    header("Access-Control-Allow-Origin: $http_origin");
}
 170
Author: Nikolay Ivanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 09:54:34

To mi pomogło:

SetEnvIf Origin "^http(s)?://(.+\.)?(domain\.example|domain2\.example)$" origin_is=$0 
Header always set Access-Control-Allow-Origin %{origin_is}e env=origin_is

Po umieszczeniu .htaccess, będzie działać na pewno.

 98
Author: Jay Dave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 00:16:52

Miałem ten sam problem z czcionkami woff, wiele subdomen musiało mieć dostęp. Aby umożliwić subdomeny dodałem coś takiego do mojego httpd.conf:

SetEnvIf Origin "^(.*\.example\.com)$" ORIGIN_SUB_DOMAIN=$1
<FilesMatch "\.woff$">
    Header set Access-Control-Allow-Origin "%{ORIGIN_SUB_DOMAIN}e" env=ORIGIN_SUB_DOMAIN
</FilesMatch>

Dla wielu domen możesz po prostu zmienić wyrażenie regularne w SetEnvIf.

 84
Author: Staugaard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-09 07:59:26

Jeśli chcesz, aby Twoja domena była zgodna z Nginx, jest to przydatne, jeśli chcesz obsługiwać czcionkę z wieloma sub-domenami:

location /fonts {
    # this will echo back the origin header
    if ($http_origin ~ "example.org$") {
        add_header "Access-Control-Allow-Origin" $http_origin;
    }
}
 56
Author: mjallday,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-13 20:25:22

Oto co zrobiłem dla aplikacji PHP, o którą prosi AJAX

$request_headers        = apache_request_headers();
$http_origin            = $request_headers['Origin'];
$allowed_http_origins   = array(
                            "http://myDumbDomain.example"   ,
                            "http://anotherDumbDomain.example"  ,
                            "http://localhost"  ,
                          );
if (in_array($http_origin, $allowed_http_origins)){  
    @header("Access-Control-Allow-Origin: " . $http_origin);
}

Jeśli serwer zezwala na wysyłanie żądań, zwróć $http_origin jako wartość nagłówka Access-Control-Allow-Origin zamiast zwracać * wieloznaczną.

 22
Author: Syed Rakib Al Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 00:17:36

Jest jedna wada, o której powinieneś być świadomy: gdy tylko wyjedziesz z plików źródłowych na CDN (lub inny serwer, który nie pozwala na skrypty) lub jeśli Twoje pliki są buforowane na serwerze proxy, zmiana odpowiedzi na podstawie nagłówka żądania 'Origin' nie będzie działać.

 18
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-20 19:18:51

Dla wielu domen, w twoim .htaccess:

<IfModule mod_headers.c>
    SetEnvIf Origin "http(s)?://(www\.)?(domain1.example|domain2.example)$" AccessControlAllowOrigin=$0$1
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    Header set Access-Control-Allow-Credentials true
</IfModule>
 16
Author: George,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 00:18:06

Dla IIS 7.5 + z zainstalowanym modułem URL Rewrite 2.0 zobacz this so answer

 14
Author: Paco Zarate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:54

[1]}dla użytkowników Nginx, aby umożliwić CORS dla wielu domen. Podoba mi się przykład @ Marshalla, chociaż jego anwers pasuje Tylko do jednej domeny. Aby dopasować listę domen i subdomen, regex ułatwia pracę z czcionkami:

location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ {
   if ( $http_origin ~* (https?://(.+\.)?(domain1|domain2|domain3)\.(?:me|co|com)$) ) {
      add_header "Access-Control-Allow-Origin" "$http_origin";
   }
}

Wyświetli tylko nagłówki "Access-Control-Allow-Origin" pasujące do podanej listy domen.

 13
Author: Adriano Rosa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-10 18:31:14

Oto rozwiązanie dla Java web app, oparte na odpowiedzi od yesthatguy.

Używam Jersey REST 1.x

Konfiguracja sieci.xml, aby być świadomym Jersey REST i CORSResponseFilter

 <!-- Jersey REST config -->
  <servlet>    
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param> 
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
      <param-value>com.your.package.CORSResponseFilter</param-value>
    </init-param>   
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.your.package</param-value>
    </init-param>        
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/ws/*</url-pattern>
  </servlet-mapping>

Oto kod do CORSResponseFilter

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;


public class CORSResponseFilter implements ContainerResponseFilter{

@Override
public ContainerResponse filter(ContainerRequest request,
        ContainerResponse response) {

    String[] allowDomain = {"http://localhost:9000","https://my.domain.example"};
    Set<String> allowedOrigins = new HashSet<String>(Arrays.asList (allowDomain));                  

    String originHeader = request.getHeaderValue("Origin");

    if(allowedOrigins.contains(originHeader)) {
        response.getHttpHeaders().add("Access-Control-Allow-Origin", originHeader);

        response.getHttpHeaders().add("Access-Control-Allow-Headers",
                "origin, content-type, accept, authorization");
        response.getHttpHeaders().add("Access-Control-Allow-Credentials", "true");
        response.getHttpHeaders().add("Access-Control-Allow-Methods",
                "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }

    return response;
}

}
 10
Author: duvo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 00:18:53

Jak wspomniano powyżej, Access-Control-Allow-Origin powinna być unikalna, a Vary powinna być ustawiona na Origin, jeśli jesteś za CDN (Content Delivery Network).

W tym celu należy skontaktować się z naszym Biurem Obsługi Klienta.]}
if ($http_origin ~* (https?://.*\.mydomain.example(:[0-9]+)?)) {
  set $cors "true";
}
if ($cors = "true") {
  add_header 'Access-Control-Allow-Origin' "$http_origin";
  add_header 'X-Frame-Options' "ALLOW FROM $http_origin";
  add_header 'Access-Control-Allow-Credentials' 'true';
  add_header 'Vary' 'Origin';
}
 7
Author: hernvnc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-31 06:59:05

Może się mylę, ale z tego co widzę Access-Control-Allow-Origin mA "origin-list" jako parametr.

Przez definicja an origin-list to:

origin            = "origin" ":" 1*WSP [ "null" / origin-list ]
origin-list       = serialized-origin *( 1*WSP serialized-origin )
serialized-origin = scheme "://" host [ ":" port ]
                  ; <scheme>, <host>, <port> productions from RFC3986

I z tego twierdzę, że różne pochodzenie są dopuszczone i powinny być oddzielone przestrzenią.

 6
Author: drAlberT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 00:20:11

Z trudem skonfigurowałem to dla domeny z HTTPS, więc pomyślałem, że podzielę się rozwiązaniem. Użyłem następującej dyrektywy w moim httpd.plik conf:

    <FilesMatch "\.(ttf|otf|eot|woff)$">
            SetEnvIf Origin "^http(s)?://(.+\.)?example\.com$" AccessControlAllowOrigin=$0
            Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    </FilesMatch>

Zmień example.com na nazwę domeny. Dodaj to wewnątrz {[3] } w swoim httpd.plik conf . Zauważ, że jeśli twoja VirtualHost mA przyrostek portu (np. :80), to ta dyrektywa nie będzie miała zastosowania do HTTPS, więc musisz również przejść do / etc / apache2/sites-available / default-ssl i dodać tę samą dyrektywę w tym plik, wewnątrz sekcji <VirtualHost _default_:443>.

Po zaktualizowaniu plików konfiguracyjnych, będziesz musiał uruchomić następujące polecenia w terminalu:

a2enmod headers
sudo service apache2 reload
 5
Author: Alex W,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-17 00:12:56

Jeśli masz problemy z czcionkami, użyj:

<FilesMatch "\.(ttf|ttc|otf|eot|woff)$">
    <IfModule mod_headers>
        Header set Access-Control-Allow-Origin "*"
    </IfModule>
</FilesMatch>
 4
Author: noun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-06 17:43:55

HTTP_ORIGIN nie jest używany przez wszystkie przeglądarki. Jak bezpieczny jest HTTP_ORIGIN? dla mnie wychodzi pusto w FF.
Mam witryny, które pozwalają na dostęp do mojej witryny wysłać przez ID witryny, a następnie sprawdzić mój DB rekord z tym id i uzyskać wartość kolumny SITE_URL (www.yoursite.com).

header('Access-Control-Allow-Origin: http://'.$row['SITE_URL']);

Nawet jeśli wyślij poprawny identyfikator witryny, żądanie musi pochodzić z domeny wymienionej w moim DB powiązanej z tym identyfikatorem witryny.

 1
Author: mathius1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:54

Oto Rozszerzona opcja dla apache, która zawiera niektóre z najnowszych i planowanych definicji czcionek:

<FilesMatch "\.(ttf|otf|eot|woff|woff2|sfnt|svg)$">
    <IfModule mod_headers.c>
        SetEnvIf Origin "^http(s)?://(.+\.)?(domainname1|domainname2|domainname3)\.(?:com|net|org)$" AccessControlAllowOrigin=$0$1$2
        Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        Header set Access-Control-Allow-Credentials true
    </IfModule>
</FilesMatch>
 1
Author: Mike Kormendy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-15 22:31:33

I jeszcze jedna odpowiedź w Django. Aby mieć jeden widok Zezwalaj CORS z wielu domen, Oto Mój kod:

def my_view(request):
    if 'HTTP_ORIGIN' in request.META.keys() and request.META['HTTP_ORIGIN'] in ['http://allowed-unsecure-domain.com', 'https://allowed-secure-domain.com', ...]:
        response = my_view_response() # Create your desired response data: JsonResponse, HttpResponse...
        # Then add CORS headers for access from delivery
        response["Access-Control-Allow-Origin"] = request.META['HTTP_ORIGIN']
        response["Access-Control-Allow-Methods"] = "GET" # "GET, POST, PUT, DELETE, OPTIONS, HEAD"
        response["Access-Control-Max-Age"] = "1000"  
        response["Access-Control-Allow-Headers"] = "*"  
        return response
 1
Author: Silvain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-28 11:05:28

Aby ułatwić dostęp do wielu domen dla usługi ASMX, stworzyłem tę funkcję w global.plik asax:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    string CORSServices = "/account.asmx|/account2.asmx";
    if (CORSServices.IndexOf(HttpContext.Current.Request.Url.AbsolutePath) > -1)
    {
        string allowedDomains = "http://xxx.yyy.example|http://aaa.bbb.example";

        if(allowedDomains.IndexOf(HttpContext.Current.Request.Headers["Origin"]) > -1)
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", HttpContext.Current.Request.Headers["Origin"]);

        if(HttpContext.Current.Request.HttpMethod == "OPTIONS")
            HttpContext.Current.Response.End();
    }
}

Pozwala to również na obsługę Kors OPTIONS czasownika.

 1
Author: Derek Wade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 00:20:55

Odpowiedź Wsparcia Google na wyświetlanie reklam przez SSL i gramatyka w samym RFC wydaje się wskazywać, że możesz ograniczać spacje adresów URL. Nie wiem, jak dobrze jest to obsługiwane w różnych przeglądarkach.

 0
Author: Bob Aman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-18 12:46:03

Jeśli spróbujesz tak wielu przykładów kodu, jak ja, aby to działało za pomocą CORS, warto wspomnieć, że musisz wyczyścić pamięć podręczną, aby spróbować, jeśli faktycznie działa, podobnie do problemów, takich jak gdy stare obrazy są nadal obecne, nawet jeśli jest usuwany na serwerze (ponieważ jest nadal zapisany w pamięci podręcznej).

Na przykład CTRL + SHIFT + DEL w Google Chrome, aby usunąć pamięć podręczną.

To pomogło mi używać tego kodu po wypróbowaniu wielu czystych rozwiązań .htaccess i wydawało się to tylko jeden działa (przynajmniej dla mnie):

    Header add Access-Control-Allow-Origin "http://google.com"
    Header add Access-Control-Allow-Headers "authorization, origin, user-token, x-requested-with, content-type"
    Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

    <FilesMatch "\.(ttf|otf|eot|woff)$">
        <IfModule mod_headers.c>
            SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.com|dev02.otherdomain.net)$" AccessControlAllowOrigin=$0
            Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        </IfModule>
    </FilesMatch>

Zauważ również, że jest szeroko rozpowszechnione, że wiele rozwiązań mówi, że musisz wpisać Header set ..., ale jest to Header add .... Mam nadzieję, że to pomoże komuś, kto ma takie same problemy przez kilka godzin, jak ja.

 0
Author: AlexioVay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-03 08:19:11

Dla dość łatwego kopiowania / wklejania dla aplikacji. NET, napisałem to, aby włączyć CORS z poziomu globalnego.plik asax. Kod ten jest zgodny z poradą udzieloną w aktualnie akceptowanej odpowiedzi, odzwierciedlając to, jakie pochodzenie jest podane we wniosku do odpowiedzi. To skutecznie osiąga " * " bez użycia go. Powodem tego jest to, że umożliwia wiele innych funkcji CORS, w tym możliwość wysłania zapytania AJAX XMLHttpRequest z atrybutem 'withCredentials' ustawionym na "prawda".

void Application_BeginRequest(object sender, EventArgs e)
{
    if (Request.HttpMethod == "OPTIONS")
    {
        Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
        Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
        Response.AddHeader("Access-Control-Max-Age", "1728000");
        Response.End();
    }
    else
    {
        Response.AddHeader("Access-Control-Allow-Credentials", "true");

        if (Request.Headers["Origin"] != null)
            Response.AddHeader("Access-Control-Allow-Origin" , Request.Headers["Origin"]);
        else
            Response.AddHeader("Access-Control-Allow-Origin" , "*");
    }
}
 0
Author: QA Collective,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-21 01:24:31

Bardziej elastycznym podejściem jest użycie wyrażeń Apache 2.4. Możesz dopasować domeny, ścieżki i prawie każdą inną zmienną żądania. Chociaż odpowiedź jest * dla wszystkich, jedynymi żądającymi otrzymującymi tę odpowiedź są ci, którzy i tak spełniają wymagania.

<IfModule mod_headers.c>
    <If "%{HTTP:Host} =~ /\\byourdomain\\.example$/i">
        Header set Access-Control-Allow-Origin "*"
    </If>
</IfModule>
 0
Author: Walf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 00:21:38

Przykład kodu PHP do dopasowania subdomen.

if( preg_match("/http:\/\/(.*?)\.yourdomain.example/", $_SERVER['HTTP_ORIGIN'], $matches )) {
        $theMatch = $matches[0];
        header('Access-Control-Allow-Origin: ' . $theMatch);
}
 0
Author: blak3r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 00:22:00

Odpowiedzią wydaje się być użycie nagłówka więcej niż raz. Czyli zamiast wysyłać

Access-Control-Allow-Origin: http://domain1.example, http://domain2.example, http://domain3.example

Wyślij

Access-Control-Allow-Origin: http://domain1.example
Access-Control-Allow-Origin: http://domain2.example
Access-Control-Allow-Origin: http://domain3.example

Na Apache, można to zrobić w httpd.conf <VirtualHost> section or .htaccess file using mod_headers and this syntax:

Header add Access-Control-Allow-Origin "http://domain1.example"
Header add Access-Control-Allow-Origin "http://domain2.example"
Header add Access-Control-Allow-Origin "http://domain3.example"

Sztuką jest użycie add zamiast append jako pierwszego argumentu.

 -1
Author: Ben C. Forsberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 00:22:44

Możemy również ustawić to w trybie globalnym.plik asax dla Asp.net podanie.

protected void Application_BeginRequest(object sender, EventArgs e)
    {

    // enable CORS
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "https://www.youtube.com");

    }
 -2
Author: sudhAnsu63,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-31 11:59:45