Wo die 301 Umleitung her kommt ist mir bei deiner nginx Konfiguration aus dem Stand nicht ersichtlich.
Arbeitest du mit eingebettetem PHP oder haben alle deine PHP Dateien auch die *.php Endung?
Da kannst du dann auch sowas machen wie
location / {
...
location ~ \.php(/|$) {
....
}
}
Auf diese Weise werden nur .php Dateien (optional mit angehängtem /path info) an PHP durchgeleitet und du musst keine Ausnahmeregelungen für zig andere Dateiendungen schaffen.
Der PHP-Block ist bei mir ein eigenes Include-File so kann ich in jedem location Block der auch PHP-Dateien ausführen soll, einfach ein include php.conf
machen und fertig. Generell habe ich meine nginx Konfiguration komplett neu geschrieben und voll modularisiert... includes machen das Leben deutlich leichter - solange man den Überblick nicht verliert.
Was die Rechte angeht, du kannst für jedes Projekt einen eigenen User anlegen und einen eigenen PHP-FPM Pool der unter diesem User läuft. Damit hat PHP dann Schreibrechte, aber eben nur aufs eigene Projekt. Der Webserver kann sich dann mit Leserechten für die Gruppe begnügen und du hast chmod 750 / 640 realisiert, wenn du darauf Wert legst.