Je veux que mon nginx fasse afficher toutes les URLs propres.
Avec quelques recherches, j'ai fait le premier cas au travail. C'est fait en suivant la configuration:
location / {
root html;
index index.html index.htm index.php;
try_files $uri.html $uri/ =404;
}
Cela fonctionne pour indexhtml.html qui s’affiche sous la forme indexhtml, mais rien ne se passe avec .php. Si je change $ uri.html en $ uri.php, cela ne fonctionne ni pour .html, ni .php. J'ai essayé de mettre quelque chose de similaire dans l'emplacement php mais sans aucun succès.
Des conseils?
D'après mes recherches, si vous ajoutez votre fichier /etc/nginx/conf.d/domain.tld.conf à inclure:
location / {
try_files $uri $uri.html $uri/ @extensionless-php;
index index.html index.htm index.php;
}
location ~ \.php$ {
try_files $uri =404;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
Ensuite, redémarrez nginx et essayez-le. J'espère que cela vous aidera! Plus d'informations peuvent être trouvées (où je les ai trouvées) ici @ tweaktalk.net
Pas besoin de blocs supplémentaires et d'emplacements nommés et tout. Déplacer également la ligne index
en dehors du bloc de localisation
server {
index index.html index.php;
location / {
try_files $uri $uri/ $uri.html $uri.php$is_args$query_string;
}
location ~ \.php$ {
try_files $uri =404;
# add fastcgi_pass line here, depending if you use socket or port
}
}
Gardez à l'esprit que si vous avez un dossier et un fichier portant le même nom dans le même dossier, comme /folder/xyz/
et /folder/xyz.php
, vous ne pourrez pas exécuter le fichier php si le dossier xyz
contient un index.php
ou index.html
, conservez simplement ceci dans esprit.
Pour approfondir la réponse de Mohammad , vous pouvez également proposer des redirections de .html
et .php
vers les versions sans extension.
Cela peut être accompli du fait que $request_uri
contient "l'URI de la requête d'origine complète (avec arguments)" et qu'il n'est pas affecté par les réécritures internes non visibles par l'utilisateur.
server {
index index.html index.php;
location / {
if ($request_uri ~ ^/(.*)\.html$) { return 302 /$1; }
try_files $uri $uri/ $uri.html $uri.php?$args;
}
location ~ \.php$ {
if ($request_uri ~ ^/([^?]*)\.php($|\?)) { return 302 /$1?$args; }
try_files $uri =404;
# add fastcgi_pass line here, depending if you use socket or port
}
}
Peut-être cela peut-il vous être utile… C'est simple et le travail est fait:
location / {
rewrite ^/([^\.]+)$ /$1.html break;
}