regex - define - Agregue barras al final de cada url(necesita una regla de reescritura para nginx)
nginx location equal (9)
Intento obtener un "/" para cada final de urls:
example.com/art
debería
example.com/art/
Yo uso nginx como servidor web.
Necesito la regla de reescritura para esto ...
Para una mejor comprensión, comprueba esto:
http://3much.schnickschnack.info/art/projekte
Si presiona sobre una miniatura pequeña debajo de la imagen grande, vuelve a cargar y muestra esta url:
http://3much.schnickschnack.info/art/projekte/#0
Si ahora tengo una barra en todas las direcciones URL (al final) funcionaría sin una recarga del sitio.
En este momento tengo esta configuración en nginx-http.conf:
server {
listen *:80;
server_name 3much.schnickschnack.info;
access_log /data/plone/deamon/var/log/main-plone-access.log;
rewrite ^/(.*)$ /VirtualHostBase/http/3much.schnickschnack.info:80/2much/VirtualHostRoot/$1 last;
location / {
proxy_pass http://cache;
}
}
¿Cómo configuro nginx para agregar una barra inclinada? (Creo que debería una regla de reescritura?)
Es extraño que este sea el primer resultado en Google, pero no tiene una respuesta satisfactoria. Hay dos buenas maneras de hacer esto, lo sé. El primero es verificar directamente si la solicitud golpeará un archivo y solo aplicará una condición de reescritura si no es así. P.ej
server {
# ...
if (!-f $request_filename) {
rewrite [^/]$ $uri/ permanent;
}
location / {
# CMS logic, e.g. try_files $uri $uri /index.php$request_uri;
}
# ...
}
El segundo, que muchos prefieren ya que prefieren evitar el uso si no es 100% necesario, es usar try_files para enviar la solicitud a un bloque de ubicación con nombre cuando no llegue a un archivo. P.ej
server {
# ...
location / {
try_files $uri $uri/ @cms;
}
location @cms {
rewrite [^/]$ $uri/ permanent;
# CMS logic, e.g. rewrite ^ /index.php$request_uri;
}
# ...
}
Es más probable que piense que desearía algo como esto:
rewrite ^([^.]*[^/])$ $1/ permanent;
La expresión regular se traduce en: "reescribir todos los URI sin ninguno". en ellos que no terminan con un ''/'' al URI + ''/'' "O simplemente:" Si el URI no tiene un punto y no termina con una barra inclinada, agregue una barra inclinada hasta el final "
La razón por la que solo se reescriben los URI sin puntos en ellos hace que todo archivo con una extensión de archivo no se vuelva a escribir. Por ejemplo, sus imágenes, css, javascript, etc. y previenen posibles bucles de redirección si usa algún framework php que también haga sus propias reescrituras.
Otra reescritura común para acompañar esto sería:
rewrite ^([^.]*)$ /index.php;
Esto simplemente reescribe todos los URI que no tienen puntos en ellos en su index.php (o en cualquier archivo desde el que ejecute su controlador).
Para nginx:
rewrite ^(.*[^/])$ $1/ permanent;
Pruebe esto: ^(.*)$ http://domain.com/$1/ [L,R=301]
Esto redirige (código de estado 301) todo ($ 1) sin un "/" a "$ 1 /"
Si nginx detrás del proxy con https, este fragmento corrige el redireccionamiento de $scheme
map $http_x_forwarded_proto $upstream_scheme {
"https" "https";
default "http";
}
server {
...
location / {
rewrite ^([^./?]*[^/])$ $upstream_scheme://$http_host$1/ permanent;
}
...
}
Y en el proxy ascendente pase el encabezado X-Forwarded-Proto
como:
location / {
proxy_set_header X-Forwarded-Proto $scheme;
...
}
es demasiado tarde pero quiero compartir mi solución, he encontrado un problema con la barra inclinada y nginx.
#case :
# 1. abc.com/xyz => abc.com/xyz/
# 2. abc.com/xyz/ => abc.com/xyz/
# 3. abc.com/xyz?123&how=towork => abc.com/xyz/?123&how=towork
# 4. abc.com/xyz/?123&ho=towork => abc.com/xyz/?123&how=towork
y esta es mi solución
server {
....
# check if request isn''t static file
if ($request_filename !~* .(gif|html|jpe?g|png|json|ico|js|css|flv|swf|pdf|xml)$ ) {
rewrite (^[^?]+[^/?])([^/]*)$ $1/$2 permanent;
}
....
location / {
....
}
}
utilizando las reescrituras de anthonysomerset en Wordpress, experimenté problemas al acceder al panel / wp-admin debido al bucle de re-dirección. Pero resuelvo este problema usando el condicional anterior:
if ($request_uri !~ "^/wp-admin")
{
rewrite ^([^.]*[^/])$ $1/ permanent;
rewrite ^([^.]*)$ /index.php;
}
rewrite ^([^./?]*[^/])$ $1/ permanent;
para evitar querystrings de un URL de reposo reciba / etiquetado.
p.ej
/ myrest / do? d = 12345
server {
# ... omissis ...
# put this before your locations
rewrite ^(/.*[^/])$ $1/ permanent;
# ... omissis ...
}
Si desea que se evite algún tipo de solicitud (por ejemplo, distinta a GET
) (generalmente se trata de solicitudes POST
, ya que rewrite
convierte cualquier método de solicitud en GET
, lo que puede interrumpir parte de la funcionalidad dinámica de su sitio), agregue un cláusula:
server {
# ... omissis ...
# put this before your locations
if ($request_method = "GET" ) {
rewrite ^(/.*[^/])$ $1/ permanent;
}
# ... omissis ...
}
También puede poner la rewrite
en un bloque de location
( if
también), para hacerlo más específico.