Soru NGINX kullanarak url'den hem .php hem de .html uzantıları nasıl kaldırılır?


Nginx'imin tüm URL'leri temizlemesini istiyorum.

Bazı araştırmalarla ilk çalışmayı yaptım. Yapılandırmayı takip ederek yapılır:

location / {
    root   html;
    index  index.html index.htm index.php;
    try_files $uri.html $uri/ =404; 
}

İndexhtml.html indexhtml olarak görüntüleniyor, ancak .php ile hiçbir şey olmuyor. $ Uri.html'yi $ uri.php olarak değiştirirseniz, .html, ne .php için de çalışır. Php lokasyonunda benzer bir şey koymayı denedim ama hiç bir başarıya gerek kalmadan.

Herhangi bir tavsiyen var mı?


33
2018-02-20 14:51


Menşei


bekle, uzantının nokta olmadan eklenmesini istiyor musun? - Mohammad AbuShady
Hayır, hiç bir uzamaya ihtiyacım yok. os only for example to understand, that Im bir tuhaf değil, kims having both index.php and index.html files on my server. However, itzaten çözüldü. - anthropophagus


Cevaplar:


Eklemek için /etc/nginx/conf.d/domain.tld.conf dosyanıza eklerseniz, araştırdığımdan:

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;
}

Ardından, nginx'i yeniden başlatın ve bir adım atın. Umarım bu size yardımcı olacaktır! Daha fazla bilgi bulunabilir (bulunduğum yeri) burada @ tweaktalk.net


34
2018-02-20 15:04



Komik. Eğer sildiysem codetry_files $ uri.html $ uri / = 404;code önceki konfigürasyonumdan ve Yours'i ekledim, herşey php ile iyi çalışıyor, ama html ile çalışmıyor. Önceki satırı kaldırmaz ve Sizinkini eklerseniz, "Sorun yükleme sayfası" görünür. Her ikisini de birlikte çalıştırabilmek için nasıl birleştirebilirim? - anthropophagus
'Try_files' satırını 'location' altından değiştirmeyi deneyin: try_files $ uri $ uri.html $ uri / @ extensionless-php; Ya da muhtemelen: try_files $ uri $ uri.html $ uri / @ extensionless-php $ uri / = 404; - Jack
Çok teşekkürler! Try_files $ uri $ uri / @ extensionless-php; try_files ile $ uri.html $ uri / @ extensionless-php; Ve sonunda html ve php için çalışıyor. Harika! - anthropophagus
Nginx'i Windows'ta kurmuş olmanız durumunda "/etc/nginx/conf.d/domain.tld" adresini bulduğumuza göre, bu aslında "nginx / conf / nginx.conf" ile aynıdır. - Tom Hagen


Ekstra bloklara ve adlandırılmış yerlere ve her şeye gerek yok. Ayrıca taşı index hat konum bloğu dışında

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
  }
}

Bir klasörün ve aynı klasörde aynı ada sahip bir dosya varsa, /folder/xyz/ ve /folder/xyz.php Eğer klasör varsa php dosyasını çalıştıramazsınız xyz bir içerir index.php veya index.html, bunu aklında tut.


38
2018-02-20 17:57



@elbowlobstercowstand, sadece başka bir ekleme, kullanırken $query_stringKullanmayı tercih ederim $is_args sade yerine ? bir takip olmamasına rağmen gerçek bir arkı olmadığı zaman küçük bir temizleyici olurdu ?URL’de - Mohammad AbuShady
Eklemek gerekirse, bu çalışmayı yapmanın önemli bir kısmı = 404 .pp bloğundaki try_files içinde olmanız, konumun / birimin sonunda değil, aksi takdirde URL'ler için 404 hatası alırsınız. php dosyası yapar bulunmaktadır. - William Turrell
@elbowlobstercowstand haklıydı, son düzenlemesini geri aldım, nginx _GET dizisini göremiyor mu? $ query_string eklenmedi. - Basil Musa


Daha fazla Muhammed'in cevabıayrıca, yönlendirmeleri de sunmak isteyebilirsiniz. .html ve .php uzatmayan sürümlere.

Bu gerçeğe bağlı olarak yapılabilir $request_uri "tam orijinal istek URI'sı (argümanlar ile)" içerir ve kullanıcı tarafından görülemeyen dahili yeniden yazmalardan etkilenmez.

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
  }
}

8
2017-10-06 09:17



"Direktif, konum bağlamında kullanıldığında sorun yaşıyorsa, bazı durumlarda beklediğiniz şeyleri yapmaz, ancak bunun yerine tamamen farklı bir şeydir. Bazı durumlarda, hatta segfaults. Mümkünse bunu önlemek için genellikle iyi bir fikirdir." nginx.com/resources/wiki/start/topics/depth/ifisevil - Tag
@Tag, ayrı bir sayfa olması gerektiği gibi geliyor ifisevilisevil; Aslında okuyorsun ifisevil bağlandığınız doküman, bir return içinden if % 100 güvenli olarak her zamanki gibi açıkça ilan edilir ve bu benim cevabımda yaptığım şeydir - cnst
Güvende olabilir, ama en iyi uygulama değildir. Lütfen oku Tuzaklar ve Ortak Hatalar. - Tag
@Tag, ne zamandan beri güvenli kullanıyor if en iyi uygulama değil mi? Ayrıca, neden en iyi uygulama olmadığını iddia etmeyen bir sayfaya bağlantı kuruyorsunuz, ancak sanki böyle olmadığını iddia ediyormuş gibi davranıyorsunuz? - cnst
SEO Uzmanı olarak, bunun kabul edilen cevap olması gerektiğini söylüyorum. - dzhi


Belki bu sizin için yararlı olabilir. Basit ve işi bitirir.

location / {
  rewrite ^/([^\.]+)$ /$1.html break;
}

0
2018-01-12 21:27