Apache / PHP yanlış dosyayı hizmet belirlenir

2 Cevap php

I have a page that is called with a url like http://testserver/path/to/foo/bar/ but apache is serving the wrong file altogether.

/path/to/ tüm kodu ve .htaccess dosyası gerçek bir dizin. foo/bar/ bir RewriteRule ile foo_bar.php yönlendirmek gerekiyordu, ama orada alır asla. Ben bu istek için bana 404s vermelidir karışıyor olabilir tüm kuralları, dışarı yorumladı var, ama aynı sorun oluşur gibi bir mod_rewrite sorunu değil:

the file that is served is /path/to/foo.php, so in it I var_dump $_SERVER and get:
REQUEST_URI = /path/to/foo/bar/
SCRIPT_NAME = /path/to/foo.php
SCRIPT_FILENAME = /real/path/to/foo.php
PATH_INFO = /bar/
PATH_TRANSLATED = /real/bar/
PHP_SELF = /path/to/foo.php/bar/

Neden bu isteği tüm bu dosyaya yönlendirilir ediliyor?

2 Cevap

Eğer mod_negotiation installed? If so, that'll take your request and try to work out what file you really meant. Unfortunately mod_negotiation mod_rewrite den yeniden yönlendirme büyüsü ile yaşıyor, bu yüzden emin mod_negotiation 's MultiViews seçeneği devre dışı bırakmanız yapabilirim Eğer isteği yeniden deneyin.

Lütfen .htaccess dosyasındaki Options -MultiViews: Eğer üzerine yazma ayarları izin veriyorsa, sizinle MultiViews devre dışı bırakabilirsiniz.

Bu mod_rewrite tarzı URL yeniden "taklit" için kullanılan PATH_INFO mekanizması ile birlikte @ murze ait ve Jacco cevaplarını @ belirtilen modüllerden biri.

PathInfo kullanarak, aşağıdakileri yapabilirsiniz:

http://testserver/index.php/path/to/foo/bar/1/2/3/

Bu index.php çağırmak ve PATH_INFO olarak kalan URL fragmanı hizmet edecektir. Ben mod_rewrite olmadan "güzel" URL'leri ile merkezi bir ön denetleyicisi kurmak için, dediğim gibi bu kullanılır.

Şimdi durumda, aynı şey olur, sadece bu

http://testserver/path/to/foo

tercüme alır - aracılığıyla mod_speling, müzakere modül veya ismi ben unuttum üçüncü modülü ya da - içine

http://testserver/path/to/foo.php

Yolun geri kalanı sadakatle o dosyaya iletilir.

Bu yüzden garip ve beklenmedik olsa, davranış amaçlar.