Permalänk
Medlem

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:

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 $uri/ index.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

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

Några förslag?

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk

Lägg bara en index.php i /about

Skickades från m.sweclockers.com

Visa signatur
Permalänk
Medlem
Skrivet av grottsten:

Lägg bara en index.php i /about

Skickades från m.sweclockers.com

Tack men tyvärr, vill inte vara beroende av mappar.

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem

Jag är ganska ny på området också, men kanske kan hjälpa dig lite på vägen.

Options +FollowSymlinks RewriteEngine On RewriteOptions Inherit RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*) index.php?url=$1 [QSA,L]

Detta är en .htaccess-fil som du placerar vid din index.php i root-mappen. Den gör så att alla requests i urlen ges tillbaka till php som $_GET['url'].

så ex: www.example.com/forums/view/1

=> $url = $_GET['url'] = /forums/view/1 Sedan får du parsa den. Tex $url = explode($url, '/') => array(0 => 'forums', 1 => 'view', 2 => '1')

Sedan får du lista ut ett sätt, tex ladda filnamn beroende på $url[0] osv, action efter $url[1] ja du förstår!

Permalänk
Medlem

Tack så jättemycket för svaret simowewe

Tyvärr använder inte Nginx .htaccess filer

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av simowewe:

Jag är ganska ny på området också, men kanske kan hjälpa dig lite på vägen.

Fast nu handlar detta inte om Apache utan Nginx.

Permalänk
Medlem

Okej, jag har ingen aning om vad Nginx gör/är så tänkte att ngt kanske skulle kunna vara till nytta! Ursäkta

Hittade denna som verkar göra det jag förklarar: http://drupal.org/node/976392

Permalänk
Medlem

Jag lägger allt i egna mappar, lite krångligt men det funkar
tex
index.html
index.html -> /donwload/
index.html -> /kontakt/

Visa signatur

i7 3770K @4.5 Ghz | MSI Z77-S01 | Radeon HD 6850 | Sandisk 120GB SSD | 8GB 1866Mhz Corsair Vengeance

Permalänk
Medlem
Skrivet av JesperA:

Tjenare!

*blablabla*

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

Några förslag?

Sådär här är ditt problem. Du ersätter ALLT med .PHP.

Du kan bland annat försöka med att 'KOLLA' ifall filen finns och ifall den inte finns så gör du en rewrite. T.ex. så här. Vist kommer de fortfarande å filerna med index.php men är det all världen? Om inte så lös det med mappar är bästa sätt.

location / { if (!-f $request_filename) { rewrite ^(.+)/ $1.php; } }

Du kan också sätta egna Rewrite regler för viss media. T.ex. som jag gör här tog bort lite privat information så går inte precis kopiera rakt av.

location ~* (css|js|png|jpe?g|gif|ico)$ { root (SECRET); expires 50h; rewrite *Removed* }

Samt ett litet tips ifall du inte redan gjort. Lägg detta under http

gzip on; gzip_proxied off; gzip_http_version 1.1; gzip_comp_level 9; gzip_min_length 0; gzip_vary on; gzip_types text/plain text/html text/xml text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/atom+xml;

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Medlem

Tack för svaret, ska köra på den konfigen framöver.

Tänkte också att det är lite konstigt att den loggade alla errors när man besökte bildfiler:

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"

En request för en vanlig bildfil borde väl inte gå igenom fpm.sock?

Iaf, vore kul att veta vad som är fel med min vanliga konfig som jag postade allra först, den har haft en jäkla massa underliga problem

* Om bilderna fungerade så fungerade INTE www.example.com/about/

* Om bilderna INTE fungerade så fungerade www.example.com/about/

* Bilderna verkar alltid ha fungerat om man lade dom i Root, men såfort man lade dom i en mapp som låg i Root så fungerade dom inte

Nedanför är den konfigen som jag kör just nu, den följer inte dendär tanken att den skall kolla upp filerna innan dom körs, MEN grejen är att nu fungerar både bilderna och www.example.com/about/ vilket är mycket märkligt eftersom jag använt denna konfigen förr men då fungerade inte båda samtidigt.

Jag vet inte, kan det vara något fel med APC? Att den typ cachar något så den fortfarande har massa cachade filer trots att man restartat Nginx 100 miljarder gånger? Startar jag om Nginx nu så kommer den säkert sluta fungera igen

server { listen 51001; # listen also for IPv4 traffic on "regular" IPv4 sockets server_name module; access_log /var/log/nginx/$host.access.log; error_log /var/log/nginx/error.log; root /var/www/Modules/Forum/; 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 $uri/ index.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; } }

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem

iaf när jag kör php mvc objektorienterat, så brukar jag skapa en metod $html->css som kör links till css beroende på hur djupt man gått, tex www.example.com/about/ så har vi gått in 2 "/", vilket gör att css filen ska linkas ../../href, vet inte om det är enda sättet att lösa det, men iaf en väg... likandant $html->img till exempel

Permalänk
Avstängd

Säker gärna själv svar på det. Men jag vill ha svar på om det går att få bort index.php som min sida slutar med?

Permalänk
Medlem
Skrivet av vetintevad:

Säker gärna själv svar på det. Men jag vill ha svar på om det går att få bort index.php som min sida slutar med?

Oj jösses, blev förvånad när min 5 år gamla tråd dök upp

Men iaf, lägg

location / { try_files $uri $uri/ /index.php?$args; }

Inom ditt server {...} block, skall fungera, fungerar för mig iaf.

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Avstängd
Skrivet av JesperA:

Oj jösses, blev förvånad när min 5 år gamla tråd dök upp

Men iaf, lägg

location / { try_files $uri $uri/ /index.php?$args; }

Inom ditt server {...} block, skall fungera, fungerar för mig iaf.

är det en folder eller vad det markerade?

Permalänk
Medlem
Skrivet av vetintevad:

är det en folder eller vad det markerade?

Nej, det är en "regel" för din domäns request, den skickar alla requests till din index.php (sålänge inte en "äkta" php fil matchar sökvägen), som ligger i root

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Avstängd
Skrivet av JesperA:

Nej, det är en "regel" för din domäns request, den skickar alla requests till din index.php (sålänge inte en "äkta" php fil matchar sökvägen), som ligger i root

Men var ska jag lägga in det?

Permalänk
Avstängd
Skrivet av JesperA:

Nej, det är en "regel" för din domäns request, den skickar alla requests till din index.php (sålänge inte en "äkta" php fil matchar sökvägen), som ligger i root

Lever du?