unit icon indicating copy to clipboard operation
unit copied to clipboard

Add support for PHP `$uri`, `index`, *then* `script`

Open mqudsi opened this issue 1 year ago • 1 comments

Presently, including a script app.php in a nginx-unit php application's definition causes any requests to that app to execute script, ignoring $uri and index.

This causes a problem for a lot of configurations where virtual paths are used in the same namespace (prefixed path) as physical php files, e.g. given the following directory tree, there is no way to service all of the following requests without pre-enumerating all possible directory names or all possible filename patterns:

app-root/
├─ dir1/
│  ├─ index.php
│  ├─ script.php
├─ static-file.css
├─ main.php
	"applications": {
		"php": {
			"type": "php",
			"targets": {
				"direct": {
					"index": "index.php",
					"root": "/var/www/app-root/"
				},
				"main": {
					"index": "index.php",
					"script": "main.php",
					"root": "/var/www/app-root/"
				}
			},
  • You can match *.php and pass it to applications/php/direct to get URLs like /dir1/index.php and /dir1/script.php to work
  • You can use share with /path/to/app-root/ to load static files with types: [ "!*/*php" ], and set fallback to applications/php/main which handles requests like /static-file.css and virtual paths such as /this/path/isnt/real that need to be mapped to /main.php
  • But that breaks the execution of /app-root/dir1 or /app-root/dir1/ because script overrides both $uri and index, meaning both those requests will be mapped to /app-root/main.php and not /app-root/dir1/index.php

mqudsi avatar Jan 20 '24 21:01 mqudsi

@mqudsi Thanks for reporting this. Can you please provide your Unit routes configuration? That would be great. We will make sure we will look into this. I have some quite large configuration and I just want to make sure I can see your routes configuration before sharing any more information.

tippexs avatar Jan 22 '24 09:01 tippexs