Nejde spustit PHP soubor, načítá se nette a píše 404

scientific
Člen | 93
+
0
-

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 | 713
+
-2
-

@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 | 713
+
+1
-

@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 | 1146
+
0
-

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 2×?

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 | 713
+
0
-

@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 | 93
+
0
-

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.