2014-09-11 2 views
3

Я запускаю Apache 2.2 с FastCGI и php-fpm. Я пытаюсь повторить следующую логику:php-fpm - Как выполнить определенные символические ссылки как скрипты PHP

<FilesMatch "^(admin|api|app)?(_dev)?$"> 
    #ForceType application/x-httpd-php 
    SetHandler php-fcgi 
</FilesMatch> 

Который позволяет мне симлинку admin.php как администратор, так что я могу удалить расширение .php. Кажется, единственный способ сделать это с помощью php-fpm - установить security.limit_extension файла www.conf на пустое место, однако, как показывают комментарии, это довольно серьезное отверстие для безопасности, поскольку этот php-код теперь можно выполнить из любого файл, независимо от расширения.

Что было бы предпочтительным способом выполнить вышеуказанное, но при этом сохранить некоторое подобие безопасности?

ответ

1

@ Mike, на основе обновленной ответ, что-то похожее на это .htaccess файл должен быть в состоянии справиться, что вы пытаетесь сделать:

# Enable the rewrite engine 
RewriteEngine on 
# Set the rewrite base path (i.e. if this .htaccess will be running at root context "/" or a subdir "/path") 
RewriteBase/

# If the file exists, process as usual. 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule .* - [NC,L] 

# If the dir exists, process as usual (if you don't need this, just comment/remove the next two lines). 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .* - [NC,L] 

# If (requested_file_name).html exists, rewrite to that file instead. 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ $1.html [QSA,L] 

# If (requested file name).php exists, rewrite to that file instead. 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.html [QSA,L] 

# If none of the above rules were triggered, fallback to index.php. 
RewriteRule ^(.*)$ index.php [QSA,L] 

С небольшим количеством настроек это должно быть в состоянии выполнить эту работу без необходимости погружения в httpd.conf и <VirtualHost> или <FilesMatch>. Надеюсь это поможет.

+0

Thx чувак, я дам ему шанс. Я пытался реализовать правила перезаписи, но не имел успеха, предоставил те, которые я пробовал, не был похож на те, которые вы предложили, поэтому, возможно, ваш будет работать. –

+0

Да, я знаю, что вы имеете в виду ...Я сам потратил бесчисленное количество часов на отладку и выяснил, почему правило перезаписи не работает должным образом. – tftd

+0

Иду дальше и выберите свой ответ, так как я считаю, что это сработает, просто не успевайте попробовать его прямо сейчас , –

2

Похоже, лучшее решение до сих пор вручную добавить известные символические ссылки в список (находится в /etc/php-fpm.d/www.conf):

security.limit_extension php admin admin_dev api api_dev app app_dev 

Не уверен, что если безопасность. Директива limit_extension может даже принимать регулярное выражение, не похоже на это, так что это примерно так же хорошо, как и получается. Как уже упоминалось в ОП, вы все равно должны поддерживать директиву FilesMatch в ВХост конфигурации, а также:

<FilesMatch "^(admin|api|app)?(_dev)?$"> 
    SetHandler php-fcgi 
</FilesMatch> 

- Обновление -

За комментариями по tftd, добавляя текущую директиву переписывания:

RewriteBase/

# we skip all files with .something 
RewriteCond %{REQUEST_URI} \..+$ 
RewriteCond %{REQUEST_URI} !\.html$ 
RewriteRule .* - [L] 

# we check if the .html version is here (caching) 
RewriteRule ^$ index.html [QSA] 
RewriteRule ^([^.]+)$ $1.html [QSA] 
RewriteCond %{REQUEST_FILENAME} !-f 

# no, so we redirect to our front web controller 
RewriteRule ^(.*)$ index.php [QSA,L] 
+1

Просто из любопытства - почему бы вам просто не использовать 'mod_rewrite' вместо' FilesMatch'? – tftd

+0

@tftd: Я открыт для предложений, я не уверен, как mod_rewrite будет написан так, что он будет служить символической ссылкой, как если бы это был php-код? –

+0

Ну, из того, что я понимаю, вы, вероятно, пытаетесь сделать ссылки MVC/SEO - то есть '/ admin/something' будет тихо перенаправлять запрос на' /admin.php? Page = something' в фоновом режиме, как если бы это было первоначальный запрос. Если это так, вы можете найти эту ссылку полезной: http://garajau.com.br/blog/2013/12/apache-2-4-and-php-fpm-using-mod_proxy_fcgi/ – tftd

Смежные вопросы