nginx - способы уменьшить количество файлов на сервере - 404 работает, но возвращает статус 404 - PullRequest
0 голосов
/ 01 августа 2011

Наш сайт содержит сотни файлов альбомов в каталоге с именем /var/www/album/*.php. Каждый из этих файлов альбома называется номером альбома так: 245.php, 943.php, 103.php и т. Д. Эти файлы альбома состоят из не более чем простая директива PHP, чтобы включить сценарий album.php, который также живет в /var/www/album/album.php (основная часть показа альбома).

Я бы хотел как-то устранить необходимость даже иметь эти файлы альбомов в каталоге, поэтому я подумал о том, чтобы настроить nginx для обслуживания пользовательской страницы 404, если запрошенная страница не была найдена. На странице 404 (custom_404.php) у меня есть некоторый php-код, который удаляет _SERVER ['document_uri'], проверяет базу данных, чтобы убедиться, что это альбом, и если это так, то custom_404.php включает album.php. Если запрашиваемый файл действительно 404, то custom_404.php отображает страницу не найдена ...

Это прекрасно работает, за исключением кода состояния: 404 все еще возвращается, однако я не могу помочь, но думаю, что они должны быть лучшим способом справиться с этой ситуацией? Я хотел бы держаться подальше от прохождения маршрута album.php? Album = 245! Это возможно с nginx и php?

Спасибо!

1 Ответ

0 голосов
/ 01 августа 2011

Сначала скажите nginx, чтобы он обслуживал index.php, когда запрошенный файл не найден:

try_files $uri /index.php;

Затем в index.php извлеките необходимую информацию из URI:

$uri = $_SERVER['REQUEST_URI'];
// logic to extract the album etc

Так (например) в вашем браузере вы нажимаете http://yoursite.com/album/123 и в вашем index.php вы получаете:

$uri = '/album/123';

(Затем вы можете удалить все файлы N.php.)

...