2011-03-30 23 views
15

tengo una reescritura en nginx o Apache para esta dirección:Apache reescritura - obtener la URL original en PHP

http://domain.com/hello 

a un guión como

http://domain.com/test.php&ref=hell 

¿Cómo puedo acceder a esta URL reescrito en PHP ? Porque, si uso $_SERVER['REQUEST_URI'], por supuesto, me sale:

/test.php&ref=hell 

pero yo sólo quiero:

/hello 

Es esto posible? Gracias por ayuda.

UPD nginx CNF

proxy_redirect off; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

server 
{ 
    listen 80; 
    server_name domain.test; 


    location/
    { 
    rewrite ^/(main|best|air)$ /core/feeds.php?act=$1 last; 
    proxy_pass http://127.0.0.1:8080; 
    } 
} 
+3

Se puede publicar su código de reescritura? En apache, REQUEST_URI debe devolver el URI que el usuario utilizó para acceder a la página. Este es el comportamiento que obtengo cuando uso modrewrite. No puedo evitar pensar que está haciendo una redirección en lugar de una modrewrite – Jase

Respuesta

5

En Nginx conf, tenemos que añadir cabecera usuario con request_uri:

proxy_set_header request_uri $request_uri; 

Y leerlo en php:

echo $_SERVER['HTTP_REQUEST_URI']; 

UPD

por alguna razón nginx Don' Me gusta el símbolo '_' en el nombre del encabezado, no sé cómo funcionó antes, tal vez algo cambió después de la actualización de nginxAhora estoy usando

proxy_set_header rewriteduri $request_uri; 

y en php

$_SERVER['HTTP_REWRITEDURI'] 
+2

debe tenerse en cuenta que algunas configuraciones de apache añaden 'HTTP_' a archivos de entorno como este, por lo que puede estar en '$ _SERVER ['request_uri']' (note también) – changokun

5

Generalmente, usted puede encontrar la dirección URL solicitada en

  • $_SERVER['REQUEST_URI']
  • $_SERVER['REDIRECT_URL'] (quizá Apache solamente, no sé sobre nginx)

Sé que mencionó $_SERVER['REQUEST_URI'] contiene su URL reescrita, pero en todas mis pruebas, contiene la solicitud original.

¿Por qué no volcar $_SERVER y ver lo que hay allí.

+3

No es que se haya preguntado pero, para referencia futura en caso de que se haya buscado, '$ _SERVER ['HTTP_X_ORIGINAL_URL']' para IIS7 + usando el módulo Reescribir IIS –

+0

intentado do print_r ($ _ SERVER) pero no veo lo que quiero obtener, tal vez es imposible sin analizar y otros ... – swamprunner7

+1

Y en caso de búsqueda de apache2: '$ _SERVER ['REDIRECT_QUERY_STRING']' – SpiderWan

10

que realmente depende de la configuración de PHP. Con mod_php a menudo todavía tienes la ruta de solicitud original en REQUEST_URI. Para configuraciones CGI o FastCGI es bastante común REDIRECT_URL. Deberá verificar una página de phpinfo() para estar seguro.

Si realmente no puede encontrar cualquier cosa que ayude, entonces es el momento para hacer trampa! Puede adaptar su RewriteRule como este para retener la URL original en una variable de entorno de su chosing:

RewriteRule ^(\w+)$ test.php?ref=$1 [E=ORIG_URI:/$1] 

Esto entonces estaría disponible como $_SERVER["ORIG_URI"], o simplemente puede obtener de la URI con $ _GET [ 'ref ']. Pero tendrías que usar este truco en todas las RewriteRules potenciales.

Cuestiones relacionadas