Чтобы отобразить весь сайт как статический HTML,
Я хотел бы преобразовать URL - адрес , как http://example.com/script.php?t=12
в http://example.com/script.php_t=12
.
Уведомление ?
в URL преобразуется в _
.
Это позволит nginx или apache обслуживать эти файлы с диска как необработанный HTML, который мы получили и сохранили из wget
одного файла для каждого URL, а не как файл PHP.
Возможно ли это сделать с помощью перезаписи URL Nginx?
http://example.com/script.php?a=1&t=3
понадобится какое-то супер причудливое действие по переписываниюt
напримерf
,u
и т. д.Ответы:
Я получил это с помощью try_files:
Это попытается найти файл на диске, названный в соответствии с шаблоном, который вы указали с «_» вместо «?».
Дальнейшая настройка зависит от того, как вы сохранили статические файлы, такие как изображения или таблицы стилей. Вы можете добавить запасной вариант, пытаясь прочитать их без диска с формой запроса, например:
источник
location ~ \.php$
мы можем приступитьtry_files
к работе, но это не сработаетlocation /
Нечто подобное:
источник
?
мой ответ..*
предложение в первом параметре rewrite. Это очень полезно!Я не думаю, что вы сможете сделать это с помощью vanilla nginx, но если вы хотите установить модуль Lua для nginx ( http://wiki.nginx.org/HttpLuaModule ), вы можете это сделать.
Протестировано локально и, кажется, делает то, что вы ищете. Если вы хотите, чтобы другие параметры были разделены амперсандами, измените блок rewrite_by_lua на
источник
Это работает на nginx / 1.6.2.
Но лично я бы использовал
try_files
решение с запасным вариантом к исходному URI, если таковой имеется .Например, если у вас есть
script.php
диск, он сначала попытается, а затем, если его нет, он пойдетscript.php_t=12
.try_files
нужна достаточно свежая версия nginx.И если этого недостаточно, вы можете сделать это внутри
if
:источник
?
туда конец переписывания, чтобы параметры запроса к нему не добавлялись ..)try_files
остановится на том,$uri
если есть блок местоположения, соответствующий этому, или файл для него (запрос без аргументов get) - так ли это??
оказывает видимого влияния на статические файлы, вы увидите только дополнительный запрос в журналах доступа; если вы заботитесь об этом, обязательно добавьте знак вопросаВики говорит
Так что тогда
rewrite ^ ${uri}_$args? last;
должно работать.источник
rewrite ^ $uri_$args? last;
Предложенные выше ответы должны работать. Однако вы видите, насколько чувствительным становится ваш URL. Поскольку nginx пытается проверить, существует ли имя файла на сервере первым, любой дополнительный параметр отбрасывает его.
Мое предложение состоит в том, чтобы оставить URL-адрес как есть и направить его в файл правильно с помощью php. У вас есть доступ к
t
параметру.источник