que proceso funcionalidad funciona como nginx

funcionalidad - proceso nginx



Reescribir la dirección de la raíz en un subdirectorio en nginx (4)

Estoy convirtiendo mi sitio de mediawiki para usar nginx como frontend para archivos estáticos con Apache en el backend para php. He conseguido que todo funcione hasta ahora, excepto cuando veo el directorio raíz "example.com" que intenta mostrar una lista de directorios y me da un error 403 porque lo tengo deshabilitado y no tengo un archivo de índice allí.

La regla de reescritura de apache que tengo ahora es simplemente:

RewriteRule ^$ /wiki/Main_Page [L]

Intenté algo similar con una directiva de ubicación en nginx, pero no funciona:

location = / { rewrite "^$" /wiki/Main_Page; }

El resto de mis directivas de ubicación son:

location / { try_files $uri $uri/ @rewrite; } location @rewrite { rewrite ^/wiki/(.*)$ /w/index.php?title=$1&$args; } location ~* /.(js|css|png|jpg|jpeg|gif|ico)$ { try_files $uri /w/index.php?title=$1&$args; expires max; log_not_found off; } location ~ /.php?$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; }

Simplemente puedo poner un archivo index.php con encabezado (''Location:'') en él, pero prefiero simplemente hacerlo correctamente con una regla de reescritura.

Todos los ejemplos que he encontrado en línea para ejecutar mediawiki con nginx ejecutan el wiki como wiki.example.com en lugar de como subdirectorio / wiki /.

Editar: También traté de agregar a los archivos try de esta manera: try_files $uri $uri/ @rewrite /wiki/Main_Page; con el mismo resultado de error 403.


  1. Asegúrate de que " / wiki / Main_Page " se pueda acceder con éxito
  2. Compruebe en la sección del servidor, no hay reglas de reescritura globales. Las reglas de reescritura en la sección del servidor se ejecutarán antes de la sección de ubicación.
  3. Usando reglas de reescritura en la sección de ubicación de esta manera:

    location = / { rewrite "^.*$" /wiki/Main_Page break; }

Preste atención "romper" aquí. Significa romper el ciclo de reescritura.

Si esta página está ubicada en el servidor backend, aquí debería usar proxy_pass.


Encontré ayuda en el chat nginx irc.

Básicamente, lo que necesitaba hacer era usar un retorno en lugar de reescribir. Así que cambié esto:

location = / { rewrite "^$" /wiki/Main_Page; }

a esto:

location = / { return 301 http://www.example.com/wiki/Main_Page; }


La respuesta que usaste es una redirección, lo que te hace omitir la / ubicación a una ubicación /wiki , puedes probar esto en su lugar

location = / { rewrite ^ /w/index.php?title=Main_Page&$args last; }

Esto debería servir al Main_Page para el / URI


Prefiero usar:

location = / { return 301 http://$host/wiki/Main_Page; }