Redirection d'annuaire nginx, Y compris les fichiers php

Auparavant, les URL de mes sites étaient telles:

https://www.example.com/forums/threads/test.123/
(Un type 1)

https://www.example.com/forums ... 3D123
(un type 2)

Maintenant, les URL ressemblent à ceci:

https://www.example.com/threads/test.123/
(Un type 1)

https://www.example.com/showthread.php?t=123
(un type 2)

J'utilise ce qui suit:

location /forums/ {
rewrite ^/forums/(.*)$ [url=https://www.example.com/]https://www.example.com/[/url]$1 permanent;
}

Et il redirige correctement l'URL de type 1, Cependant, l'URL s'adresse comme le type 2, Revenir 404. Comment puis-je avoir nginx Rediriger également les fichiers php? Remercier!
Invité:

Daniel

Confirmation de:

La raison pour laquelle ce problème est arrivé est que

location

Les directives identifiées par des expressions régulières ont la priorité et ont donc le dernier mot, donc vous avez probablement votre propre

location ~ \.php$

Le gestionnaire traite la demande.

Selon
http://nginx.org/r/location
, Vous devriez simplement

Ajouter

^~

modificateur

Dans un code existant, afin de ne pas vérifier les expressions régulières, par exemple:

location ^~ /forums/ {
rewrite ^/forums/(.*)$ [url=https://www.example.com/]https://www.example.com/[/url]$1 permanent;
}

Une autre considération est que bien que

$uri

(Variable debout pour

location

et

rewrite

Directif)

(et donc,

$1

Dans l'exemple ci-dessus, il n'y a pas non plus), ils seront toujours ajoutés automatiquement dans

rewrite

Contexte, selon
http://nginx.org/r/rewrite
, Donc, rien de plus à voir avec le code ci-dessus n'est pas nécessaire.

En prime, une optimisation associée à la maintenance est toujours possible, à savoir, vous n'avez pas besoin d'indiquer

https

(ou

$scheme

) et l'hôte est clairement, mais peut se permettre nginx Découvrez cela selon le contexte.

De plus, comme expliqué dans
http://nginx.org/docs/http/ngx ... rnals
, Vous pouvez enregistrer des instructions supplémentaires en faisant

/

Faire partie de la capture.

Ainsi, avec les deux optimisations susmentionnées, la meilleure approche de votre situation peut être:

location ^~ /forums/ {
rewrite ^/forums(/.*)$ $1 permanent;
}

Voici le code ci-dessus en action, qui confirme que

$scheme://$host

(et

:$server_port

, Seulement si nécessaire) ajouté automatiquement en fonction des paramètres décrits sur
http://nginx.org/r/absolute_redirect
:

% curl -i "localhost:4441/forums/showthread.php?t=123" |& fgrep Location
Location: [url=http://localhost:4441/showthread.php?t=123]http://localhost:4441/showthread.php?t=123[/url]
%

Pour répondre aux questions, connectez-vous ou registre