LINUX.ORG.RU
ФорумAdmin

nginx скрыть расширение определенного файла

 


0

1

Добрый вечер. Перекопал много гугла, но моего случая не смог найти. Нужно в конфиге nginx убрать расширение php одному файлу по адресу site.com/file.php пробовал так, не хочет

	if ($request_uri ~ "/file.(php|html?)") { 
	 rewrite ^/file /file.php;
	}

Перемещено hobbit из general



Последнее исправление: User01 (всего исправлений: 1)

Так твое условие предполагает, что браузер обращается именно к файлу с расширением.

Забыл я нжынс, конечно. Наверное, так:

location = /hz/gde-to/file/ {
    index /path/to/real/file.php
}
thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от User01

мне нужно чтоб при обращении по этому url просто не показывало расширение и все)

Давай ты сначала сформулируешь задачу нормально без выражений «убрать расширение» и «не показывало». Типа по запросу бла-бла должно происходить то-то и то-то.

goingUp ★★★★★
()
Ответ на: комментарий от thesis

[code] location / {

	location = /myfile {
		index /myfile.php;
	}

… [/code]

https://site.com/myfile.php перехожу, открывает как и есть, а мне нужно ему убрать .php только этому файлу, остальные трогать не нужно

User01
() автор топика
Последнее исправление: User01 (всего исправлений: 2)
Ответ на: комментарий от User01

Есть «редиректы», специальный ответ сервера браузеру, чтобы тот перешел на другой адрес. Тебе походу нужен редирект с site.com/file.php на site.com/file (но это не точно) ну и потом мой конфиг или @thesis в зависимости от того, хочешь ли ты слеш в конце)

goingUp ★★★★★
()
Ответ на: комментарий от goingUp
	location = /myfile {
		index /ds/myfile.php;
	}

перенес в папку файл 404 Not Found. Такая вроде элементарщина а уже час убит. Просто все переходы на site.com/myfile.php, сделать site.com/myfile без .php

User01
() автор топика
Последнее исправление: User01 (всего исправлений: 1)
Ответ на: комментарий от User01
rewrite     ^(/.*)\.php(\?.*)?$ $1$2 permanent;

вот так сработало, но теперь апач заругался Not Found The requested URL was not found on this server.

User01
() автор топика
Последнее исправление: User01 (всего исправлений: 2)
Ответ на: комментарий от firkax

Ты просто на пхп не писал, и поэтому не вдупляешь, что такие query string’s /manga-list?types[]=1 только пхп парсить может, поэтому все эти прятки чуть менее чем полностью бессмысленны

rtxtxtrx
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

Писал, разумеется. А ты как всегда сказал ерунду. Во-первых, такие строки можно парсить (хотя зачем?) на любом языке. Во-вторых, можно писать на пхп и такие строки не использовать, собственно большинство сайтов их не использует, а можно даже и фильтр прикрутить, чтобы считать такие строки не просто игнорируемым мусором, а выдавать юзеру какую-нить ошибку, хоть текстовую, хоть http/400, хоть 404, хоть 765 (и плевать, что такого кода и близко нет в http-стандарте, его всё равно можно отдать любым языком).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Во-первых, такие строки можно парсить

да ты чо:

In [1]: import urllib.parse

In [2]: urllib.parse.parse_qsl('types[]=1')
Out[2]: [('types[]', '1')]

In [3]:
❯ php -r '$qs = "types[]=1"; parse_str($qs, $arr); var_dump($arr);'
array(1) {
  ["types"]=>
  array(1) {
    [0]=>
    string(1) "1"
  }
}

В пхп еще куча таких приколов за исключением уже совсем явных типа <br /> <b>Warning</b>:

rtxtxtrx
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

И что ты хотел этим сказать?

> php -r ''$qs = "types[]=1"; parse_str($qs, $arr); $arr = "you noob"; var_dump($arr);'

В пхп еще куча таких приколов за исключением уже совсем явных типа <br /> <b>Warning</b>:

Да, если не знать как работает пхп-интерпретатор, можно много нового и неожиданного для себя когда-нить открыть. Но это всё тут ни при чём.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

Ой ой, обиделся, опять клоунов ставит. Ты серьезно будешь тут втирать что один тьюринг-полный язык можно надёжно отличить от другого тьюринг-полного языка, контактируя с ним только по сети?

firkax ★★★★★
()
Ответ на: комментарий от firkax

Ты не можешь сам сделать вывод, что встроенными средствами языка в тех же Python, Node.js и Java нельзя парсить параметры в массивы типа arr[]=1&arr[]=2&arr[]=3, поэтому они (параметры с индексами) почти там не используются?

Пример нода:

> node -e 'qs = require("node:querystring"); console.log(qs.parse("types[]=1"))'
[Object: null prototype] { 'types[]': '1' }
  • Это 100%-ое детектирование похапе на сервере
rtxtxtrx
()
Последнее исправление: rtxtxtrx (всего исправлений: 1)
Ответ на: комментарий от rtxtxtrx

встроенными средствами языка

Кто ж тебя заставляет их использовать? У тебя алгоритмически полный язык, можешь чем угодно парсить если хочешь этим чего-то добиться. Я вот про parse_str вообще не знал, парсил бы через explode('&',) + explode('=',,2); если б надо было отдельно это делать.

Это 100%-ое детектирование похапе на сервере

Как именно ты собрался его детектировать? Посмотрел в исходники, увидел там в начале каждого файла <?php и сделал глубокомысленный вывод из этого?

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)