Nejde spustit PHP soubor, načítá se nette a píše 404
- scientific
- Člen | 94
Ahoj, prísím o radu.
Mám URL například: https://neco.com/neco/neco.php
Přičemž ten neco.php je soubor, který obsahuje mimo jiné
následující:
require_once(dirname(__FILE__)."/../../app/bootstrap.php");
$config = new Nette\Configurator;
$config->addConfig(__DIR__."/../../app/config/config.local.neon");
$config->addConfig(__DIR__."/../../app/config/config.neon");
$config->setTempDirectory(__DIR__ . "/../../temp");
$cont = $config->createContainer();
$database = $cont->getService("database");
$user = new App\Model\User($database, 0);
Dále je tam funkce, která ověří data požadavku a pokud jsou relevantní, tak něco provede.
Problém je v tom, že namísto, aby se načítal tento existující skript, tak se načítá Nette web s tím, že namísto obsahu je napsáno 404, přičemž když se podívám v přohlížeči do sítě, tak ten existující skript neco.php Firefox vidí skutečně jako 404.
Co s tím prosím mám i https://neco.com/neco2/neco2.php a tam to funguje parádně, případně mám také https://neco.com/neco3.php a to také funguje řádně.
Ale kdyby to bylo nějakým tím front controllerem v htacessu, tak by nefungovaly snad ani ty výše uvedené případy.
Děkuji za tedy.
BTW: Pokud by to k nečemu bylo, takto vypadá htaccess:
# disable directory listing
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
# enable cool URL
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase /
# prevents files starting with dot to be viewed by browser
RewriteRule /\.|^\. - [F]
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
# http -> https
# RewriteEngine On
# RewriteCond %{HTTPS} off
# RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
# RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
</IfModule>
# enable gzip compression
<IfModule mod_deflate.c>
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>
</IfModule>
Editoval scientific (20. 2. 2023 16:52)
- m.brecher
- Generous Backer | 873
@scientific
Ahoj,
soubor .htaccess přesměruje vše kromě statických souborů pdf, js, ico, … s definovanými koncovkami do index.php který zapne Nette:
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
Takže soubor .php se přesměruje na Nette, musel by jsi modifikovat .htaccess a přidat tam podmínku pro php:
RewriteRule !\.(php|pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
Ale to jenom na vyzkoušení, je to velká bezpečnostní díra, na produkční web to určitě nedávej !!
- m.brecher
- Generous Backer | 873
@scientific
soubor .htaccess přesměruje vše kromě statických souborů pdf, js, ico, … s definovanými koncovkami do index.php který zapne Nette:
Beru zpět, .htaccess funguje jinak než jsem psal – viz první dvě podmínky v rewrite části .htaccess souboru:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
Přesměrování se koná, pokud soubor neexistuje. Pokud existuje, tak ho Apache spustí. Takže jakýkoliv soubor php v doc_root serveru by se měl spustit. Takže máš pravdu, že by to mělo fungovat. Chyba tedy nebude v .htaccess.
- Marek Bartoš
- Nette Blogger | 1280
404 webserveru, defaultní Nette 404 nebo tvoje 404 v appce?
Celý ten skript vypadá trochu divoce. Requirneš bootstrap.php, ve kterém se běžně vytváří configurator a generuje container a pak totéž děláš i v tom skriptu. Nevytváří se ti container 2x?
Jsou funkční i nefunkční skript ve stejném adresáři? Má k němu user www-data oprávnění?
- m.brecher
- Generous Backer | 873
@scientific
namísto, aby se načítal tento existující skript, tak se načítá Nette web
Ahoj, primitivní, ale funkční test jak vypátrat chybu v podobných případech, je:
<?php
....... // nějaký php kód
echo 'hallo'; // buďto se v prohlížeči vypíše nebo ne
exit;
.....
Takhle třeba můžeš ověřit, jestli se ten php soubor spustí nebo nespustí.
- scientific
- Člen | 94
echo se nevypsalo.
Na 404 to přestalo přesměrovávat po zakomentování Deny From All, kde Allow from nefungovalo kvůli reverzní proxy. Proč to psalo 404 a ne 403 je dotaz spíš na CloudFlare. :-D Prostě záhada, ale vyřešeno zakomentováním deny. Díky všem.