WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Nginx: ta bort .php från URL (https://www.wn.se/forum/showthread.php?t=1055596)

JesperA 2012-11-04 15:22

Nginx: ta bort .php från URL
 
Tjenare!

Gick över från Apache - Nginx på dev servern idag man har lite problem, det enda jag vill göra är att ta bort .php från URL:er och ersätta med en / i slutet av URL:er.

Just nu fungerar allt som körs på index.php bra, bara till att gå till www.example.com så körs ju indexfilen som vanligt, men går man till www.example.com/about/ (www.example.com/about.php) så får jag bara meddelandet: "File not found.", direktnavigering till: www.example.com/about.php fungerar fint. Men ja, Nginx verkar inte skriva om URL:erna korrekt så då hittar den inte PHP filen, hur löser jag detta? Har testat varenda svar som hittades via Google sökningar men nepp, inget fungerar, ibland verkar det som om svaren utgår från att man kör något MVC liknande (som tex WordPress) som alltid utgår från att man kör från index.php och ibland kanske index.php{query_string}, det gör jag inte i just detta fallet, vill bara att den skall ta bort .php filändelsen.

Min Nginx config fil ser ut såhär:

PHP-kod:



server 
{


  
listen 51001# listen also for IPv4 traffic on "regular" IPv4 sockets

  
server_name kaka;

  
access_log  /var/log/nginx/$host.access.log;
  
error_log   /var/log/nginx/error.log;

  
root    /var/www/kaka;
  
index   index.php index.html;

  
## Block bad bots
  
if ($http_user_agent ~* (HTTrack|HTMLParser|libcurl|discobot|Exabot|Casper|kmccrew|plaNETWORK|RPT-HTTPClient)) {
    return 
444;
  }

  
## Block certain Referers (case insensitive)
  
if ($http_referer ~* (sex|vigra|viagra) ) {
    return 
444;
  }

  
## Deny dot files:
  
location ~ /\. {
    
deny all;
  }

  
## Favicon Not Found
  
location = /favicon.ico {
    
access_log off;
    
log_not_found off;
  }

  
## Robots.txt Not Found
  
location = /robots.txt {
    
access_log off;
    
log_not_found off;
  }

  
location / {
    
try_files $uri $uriindex.php;
    
rewrite ^(.+)/ /$1.php;
  }

  
location ~ \.php$ {
    include /
etc/nginx/fastcgi.conf;
    
fastcgi_pass unix:/var/run/php5-fpm.sock;
  }


  
### NginX Status
  
location /nginx_status {
  
stub_status on;
    
access_log   off;
  }

  
### FPM Status
  
location ~ ^/(status|ping)$ {
    
fastcgi_pass unix:/var/run/php5-fpm.sock;
    
access_log      off;
  }



Edit: Ändrar jag om Location / till denna neranför så fungerar www.example.com/about/ men däremot fungerar absolut inga bilder på servern alls av någon skum anledning

PHP-kod:

location / {
    
try_files $uri $uriindex.php;
    
rewrite ^(.+)/ $1.php;
  } 


Några förslag? :D

yakuzaemme 2012-11-04 15:46

Anledning till att saker och ting inte läses in korrekt är för att URL är felaktig. Den försöker alltså läsa från example.com/about/style.css, istället från rooten. Lägg till ett "/" i början när du ska länka till saker, så läser den från rooten.

<img src="images/123.jpg"> - FEL
<img src="/images/123.png"> - RÄTT

Är sidan byggd på mycket PHP och använder include mycket, så behöver du göra en ändring även här.

include("database.php"); - FEL
include($_SERVER['DOCUMENT_ROOT'] . '/database.php'); - RÄTT

JesperA 2012-11-04 15:57

Japp precis, men inte det som är problemet riktigt, inte ens www.example.com/bildmapp/bildfil1.jpg fungerar, så jag har inga problem med själva söklänkarna utan det är något strul med Nginx config filen

OBS: Bilderna fungerar (www.example.com/bildmapp/bildfil1.jpg) om jag kör med konfig filen exakt som i mitt första exempel, byter jag som sagt ut location / med det som är i mitt andra exempel så fungerar inte ens direktnavigering till bilderna.

yakuzaemme 2012-11-04 16:28

Har du read access till mappen/filerna i fråga?

JesperA 2012-11-04 16:42

Citat:

Ursprungligen postat av yakuzaemme (Inlägg 20454556)
Har du read access till mappen/filerna i fråga?

Japp, det tror jag iaf: http://cl.ly/image/0q3m3W2T0s3L

Fungerar ju att navigera till bilderna ibland beroende på Nginx config av ovanstående man väljer

Clarence 2012-11-04 16:47

Citat:

Ursprungligen postat av yakuzaemme (Inlägg 20454552)
include("database.php"); - FEL
include($_SERVER['DOCUMENT_ROOT'] . '/database.php'); - RÄTT

include("database.php"); - FEL
include($_SERVER['DOCUMENT_ROOT'] . '/database.php'); - FEL
include(__DIR__ . '/../database.php'); - RÄTT

Då är din applikation transportabel och delar kan användas som bibliotek i andra applikationer så länge katalogstruktur behålls.

yakuzaemme 2012-11-04 16:48

Kan du lägga upp URL när /about/ fungerar men ej bilder m.m

JesperA 2012-11-04 17:10

Tyvärr har jag ingen URL just nu då jag kör den lokalt och använder mobilen som modem och begränsad bandbredd.

Iaf, min errorlogg:

2012/11/04 17:05:30 [error] 10243#0: *25 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.1.70, server: module, request: "GET /avatars/4.jpg HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.1.76:51001"

Ska den verkligen försöka hämta avatar bilden genom fastcgi och fpm.sock?

yakuzaemme 2012-11-04 17:22

Citat:

Ursprungligen postat av JesperA (Inlägg 20454566)
Tyvärr har jag ingen URL just nu då jag kör den lokalt och använder mobilen som modem och begränsad bandbredd.

Iaf, min errorlogg:

2012/11/04 17:05:30 [error] 10243#0: *25 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.1.70, server: module, request: "GET /avatars/4.jpg HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "192.168.1.76:51001"

Ska den verkligen försöka hämta avatar bilden genom fastcgi och fpm.sock?

Hm.. Är ingen expert på just detta område men jag kan ha en aning om problemet. Iom. att du kör lokalt, vilket OS sitter du på? OSX, eller typ WMWare?

JesperA 2012-11-04 17:40

Just nu kör jag Ubuntu 12.04 i en VM med VMWARE, värd OS:et är OS X (har dock samma problem i min dedikerade Ubuntu burk)

Hmm testat nu, bilderna fungerar om dom ligger i root, såfort jag slänger in dom i en mapp i root så fungerar dom inte.


Alla tider är GMT +2. Klockan är nu 01:26.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson