J'ai un hôte de site sur un serveurNGINXqui fonctionnait normalement pour supprimer index.php
dans la configuration de site nginx à l'aide de try_files
.
Mais maintenant, je vais ajouter un blog là-dessus, où l'URL sera www.foo.com/blog
, je peux accéder au blog et utiliser index.php?p=
.
Mais une fois que j’utilise pretty permalink avec Nginx Helper, www.foo.com/blog/2013/07/bar
, j’obtiens 404
.
server {
# don't forget to tell on which port this server listens
listen 80;
# listen on the www Host
server_name foo.com;
# and redirect to the non-www Host (declared below)
return 301 $scheme://www.ultra-case.com$request_uri;
}
server {
# listen 80 default_server deferred; # for Linux
# listen 80 default_server accept_filter=httpready; # for FreeBSD
listen 80;
# The Host name to respond to
server_name www.foo.com;
# Path for static files
root /web/foo.com
#index file
index index.php;
#Specify a charset
charset utf-8;
# Custom 404 page
error_page 404 /404.html;
# Uri Rewrite
location /blog {
index index.php;
try_files $uri $uri/ /blog/index.php?$args;
}
location / {
autoindex on;
# This is cool because no php is touched for static content.
# include tihe "?$args" part so non-default permalinks doesn't break when using query string
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
# Include the component config parts for h5bp
include conf/h5bp.conf;
}
La réponse acceptée achemine tout dans index.php
.
Ceci cassera certains scripts, y compris wp-admin .
location /blog/ {
index index.php;
try_files $uri $uri/ /blog/index.php?$args;
}
Euh ... Merci pour tous vos commentaires et réponses. Mais finalement j'utilise cette méthode pour que ça marche
location /blog {
index index.php;
rewrite ^/blog/(.*)+$ /blog/index.php?$1; # it finally works
# return 200 $request_uri; # it is for inspect what $request_uri is
# try_files $uri $uri/ /blog/index.php$request_uri$is_args$args; # it gets 500 server error
}
Veuillez indiquer si le réglage actuel pose des problèmes. Je vous remercie!
Je suggère ce qui suit, pour attraper des permaliens sous sous-dossier/blog
location /blog {
index index.php;
try_files $uri $uri/ /blog/index.php?$args;
}
Essayez ceci, j'ai changé ma réponse pour essayer d'imiter le même comportement que vous utilisez dans votre réécriture.
location ~ /blog(.*) {
index index.php;
try_files $uri /blog/index.php?$1&$args;
}
J'ai trouvé qu'avec le permalien activé, j'avais besoin d'une combinaison des deux ensembles de réponses donnés ici, sinon
Cela fonctionne sur mon montage
location /blog/ {
rewrite ^/blog/(blog/(tag|category|20??)/.*)+$ /blog/index.php?$1;
try_files $uri $uri/ /blog/index.php?$args =404;
}
Une solution universelle pour les jolies URL au niveau racine et un sous-dossier:
set $virtualdir "";
set $realdir "";
if ($request_uri ~ ^/([^/]*)/.*$ ) {
set $virtualdir /$1;
}
if (-d "$document_root$virtualdir") {
set $realdir "${virtualdir}";
}
location / {
try_files $uri $uri/ $realdir/index.php?$args;
}
Essaye ça
location /api {
# example: http://demo.com/api/channels/dmzb
root /data/webserver/demo.com/api/web;
rewrite ^/api/(.*) /$1 break;
try_files $uri $uri/ /api/index.php?$args;
location ~ ^/api/index\.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
# fix request_uri
set $changed_request_uri $request_uri;
if ($changed_request_uri ~ ^/api(.*)) {
set $changed_request_uri $1;
}
fastcgi_param REQUEST_URI $changed_request_uri;
# fix script_filename
fastcgi_split_path_info ^(?:\/api\/)(.+\.php)(.*);
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
}
Pensez pour php, réécrire n'est pas nécessaire avec quelque chose comme ça:
location /app/ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /path/to/your/app/index.php;
fastcgi_pass php;
}
Avec le fastcgi suivant
upstream php {
server unix:/var/run/php5-fpm.sock;
}