Как дать доступ для выполнения определенного файла php на сервере?

Привет, ребята, прежде всего извините за мой плохой английский! У меня возникли проблемы с запуском определенного файла php на сервере, и я хочу настроить .htaccess, чтобы пользователь мог запускать файл. пример: www.mywebsite.com/theme/test.php

это мой файл .htaccess, и когда я проверяю свой сайт, он возвращает «404 Not Found» `

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine on

##
## You may need to uncomment the following line for some hosting environments,
## if you have installed to a subdirectory, enter the name here also.
##
# RewriteBase /

##
## Black listed folders
##
RewriteRule ^bootstrap/.* index.php [L,NC]
RewriteRule ^config/.* index.php [L,NC]
RewriteRule ^vendor/.* index.php [L,NC]
RewriteRule ^storage/cms/.* index.php [L,NC]
RewriteRule ^storage/logs/.* index.php [L,NC]
RewriteRule ^storage/framework/.* index.php [L,NC]
RewriteRule ^storage/temp/protected/.* index.php [L,NC]
RewriteRule ^storage/app/uploads/protected/.* index.php [L,NC]

##
## White listed folders
##
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !/.well-known/*
RewriteCond %{REQUEST_FILENAME} !/storage/app/uploads/.*
RewriteCond %{REQUEST_FILENAME} !/storage/app/media/.*
RewriteCond %{REQUEST_FILENAME} !/storage/temp/public/.*
RewriteCond %{REQUEST_FILENAME} !/themes/.*/(assets|resources)/.*
RewriteCond %{REQUEST_FILENAME} !/plugins/.*/(assets|resources)/.*
RewriteCond %{REQUEST_FILENAME} !/modules/.*/(assets|resources)/.*
RewriteRule !^index.php index.php [L,NC]


##
## Block all PHP files, except index
##
 RewriteCond %{REQUEST_FILENAME} -f
 RewriteCond %{REQUEST_FILENAME} \.php$
 RewriteRule !^index.php index.php  [L,NC]

##
## Standard routes
##

 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^ index.php [L]

` Is there any way to fix the problem ?


person Aref Hoseinikia    schedule 18.12.2016    source источник


Ответы (2)


Ваша проблема в том, что правило «Блокировать все файлы PHP, кроме индексных» будет направлять все запросы на файлы PHP в индексный файл. Вот два способа исправить это.

Простое, одноразовое решение

Вы можете просто добавить это правило перед любыми другими RewriteRule строками:

RewriteRule ^theme/test\.php - [L,NC]

Более гибкое решение

Идея ниже использует другой подход и работает с вашими существующими правилами белого списка. Это может быть лучше, если вы собираетесь иметь несколько шаблонов или что-то более сложное, чем один файл, о котором нужно беспокоиться.

Для правила "белые папки" добавьте условие

RewriteCond %{REQUEST_FILENAME} !/theme/test\.php

Таким образом, блок становится

##
## White listed folders
##
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !/.well-known/*
RewriteCond %{REQUEST_FILENAME} !/storage/app/uploads/.*
RewriteCond %{REQUEST_FILENAME} !/storage/app/media/.*
RewriteCond %{REQUEST_FILENAME} !/storage/temp/public/.*
RewriteCond %{REQUEST_FILENAME} !/theme/test\.php
RewriteCond %{REQUEST_FILENAME} !/themes/.*/(assets|resources)/.*
RewriteCond %{REQUEST_FILENAME} !/plugins/.*/(assets|resources)/.*
RewriteCond %{REQUEST_FILENAME} !/modules/.*/(assets|resources)/.*
RewriteRule !^index.php index.php [L,NC]

В противном случае правило с надписью «Блокировать все файлы PHP, кроме индексных» будет направлено на индексный файл.

person elixenide    schedule 18.12.2016
comment
Спасибо за хороший ответ! у меня еще вопрос по htaccess. Я хочу, чтобы когда пользователь вводил mysite.com/chat , сервер интерпретировал его как mysite,com/theme/test.php . Тогда что я могу сделать? Еще раз спасибо. - person Aref Hoseinikia; 18.12.2016
comment
@ArefHoseinikia Рад помочь! Для других ваших нужд вам понадобится правило, подобное RewriteRule ^chat theme/test\.php [L,NC]. Кроме того, в будущем вы, вероятно, захотите задать дополнительные вопросы, нажав «Задать вопрос». Так его увидит больше людей. :) - person elixenide; 18.12.2016
comment
Еще раз спасибо и извините за мой плохой :) - person Aref Hoseinikia; 18.12.2016

Бро, может быть, ты попробуешь вот это:

RewriteRule /Route/to/Your.php

Ваша проблема возникает из-за того, что вы запрещаете все файлы .php

Повезло с этим.

person Unknown Kadaba    schedule 18.12.2016
comment
Извините, купите, что вы имеете в виду под /Route/to/Your.php? - person Aref Hoseinikia; 18.12.2016
comment
Это совсем не правильно, и это правило ничего не даст, потому что это неправильно определенное правило. - person elixenide; 18.12.2016