Nginx redirige toutes les demandes du sous-répertoire vers une autre racine de sous-répertoire
Je suis assez nouveau sur Nginx, de sorte s'il vous plaît garder avec moi.
Je suis en train de rediriger toutes les requêtes à partir d'un sous-répertoire (store) à la racine d'un autre sous-répertoire (commerce). Voir mes progrès ci-dessous. Le site de la cible sous-répertoire (du commerce) est un site magento c'est ce que la plupart des règles actuelles sont pour.
server {
server_name example.com *.example.com;
root /usr/share/nginx/html/example.com/public_html;
index index.php index.html index.htm;
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
location / {
try_files $uri $uri/ /index.html;
}
location /trade/ {
index index.html index.php;
try_files $uri $uri/ @handler;
expires 30d;
}
location ~ /store {
rewrite /trade permanent;
}
location ~ ^/trade/(app|includes|lib|media/downloadable|pkginfo|report/config.xml|var)/ { internal; }
location /trade/var/export/ { internal; }
location /. { return 404; }
location @handler { rewrite //trade/index.php; }
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
La section je suis à l'aide de redirection est la suivante:
location ~ /store {
rewrite /trade permanent;
}
Cela fonctionne pour example.com/store mais pas example/store/index.php ou de toute autre uri avec des arguments. J'ai le sentiment que le fichier php section du bas est remplacer le traitement. C'est pourquoi j'ai mis le ~ en face de l'emplacement de stockage de la documentation ici les etats ce sera traité en premier. Le traitement de l'arrêter ou continuer?
J'ai lu sur l'imbrication des un php règle, mais j'ai essayé, en vain.
J'apprécierais toute aide.
source d'informationauteur user1214769
Vous devez vous connecter pour publier un commentaire.
ok essayer quelque chose comme cela
En essayant d'éviter codé en dur trucs, autant que possible, et en utilisant de retour car il est préféré permanente réécrit
Ok,
De revenir à ce que je puisse voir le problème.
Dans Nginx lorsque vous ajouter un emplacement directive ~ cela signifie que vous souhaitez traiter des expressions régulières dans votre directive (sensible à la casse, ~* insensible à la casse). Je crois que tous les regex directives processus avant tout les autres, mais je me tiens à être corrigé.
Alors, quand je suis à l'aide de:
Il n'y a pas de regex. Son est tout simplement correspondance /de stocker et de les rediriger vers le commerce.
Après quelques recherches (et de polissage sur ma regex, c'est de la foutaise), je suis revenue à elle et sont venus avec une solution de travail.
Ici, je demande à la directive pour traiter les regex en entrant ~ alors faire correspondre une url avec /store/.
Alors, d'après les docs, la réécriture de la syntaxe est:
réécrire l'expression régulière de remplacement [ drapeau ]
donc je suis correspondants toutes les url avec les stocker et de façon permanente les rediriger vers le nouveau sous-dossier.
Très simple, trop donc, en fait, mais bon, chaque jour est un jour d'école. Je suis ouvert à la correction de tout cela et j'espère que ça aide quelqu'un.
Vous devez vous assurer que votre
location ~ \.php$
gestionnaire ne prend pas toutes les Url en dessous de l'ancien dossier. En effet, les règles de priorité sont clairement documentée dans http://nginx.org/r/locationet vous pouvez utiliser des expressions régulières, ou, mieux encore, l'utilisation du préfixe de base de l'appariement avec le^~
modificateur de demander que la recherche doit s'arrêter sans essayer de voir si la regex basé\.php$
location
correspondent à:L'extrait ci-dessus est probablement le moyen le plus efficace de le faire, mais voici une autre façon de faire de même:
Pourquoi un exemple a
$is_args$args
et l'autre ne l'est pas? Bonne question! Notez quelocation
directive ainsi que le premier paramètre de larewrite
directive fonctionnent sur la base du contenu de la$uri
variable, par opposition à$request_uri
. Longue histoire courte, mais$uri
ne contient pas de$args
de sorte que, dans les deux cas,$1
ne contiennent aucuneargs
; toutefois, dans le cas derewrite
le cas est jugé si commun que$args
sont automatiquement rajoutés par nginx, à moins que la nouvelle chaîne se termine par un?
personnage, voir http://nginx.org/r/rewrite.