Хранение изображений вне public_html

Правило вашего переписывания выглядит почти нормально.

Сначала убедитесь, что ваш файл .htaccess находится в вашем корневом каталоге документа (то же самое место, что и index.php), или это повлияет только на подпапку он находится в (и любых подпапках внутри этого - рекурсивно).

Далее сделайте небольшое изменение для вашего правила, чтобы оно выглядело примерно так:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA]

re только сопоставление на ., которое является одним экземпляром любого символа, вам нужно как минимум .* соответствовать любому количеству экземпляров любого символа.

Переменная $_GET['path'] будет содержать фальшивую структуру каталогов , поэтому /mvc/module/test, например, вы можете использовать в index.php для определения Controller и действий, которые вы хотите выполнить.

Если вы хотите, чтобы весь shebang был установлен в подкаталог, например /mvc/ или /framework/, наименее сложный способ сделать это - слегка изменить правило перезаписи, чтобы учесть это.

RewriteRule ^(.*)$ /mvc/index.php?path=$1 [NC,L,QSA]

И убедитесь, что ваш index.php находится в этой папке, в то время как файл .htaccess находится в корне документа.

Альтернатива $_GET['path'] (обновлено февраль18)

На самом деле нет необходимости (и даже не сейчас) установить путь в качестве переменной $_GET, многие фреймворки будут полагаться на $_SERVER['REQUEST_URI'] для получения той же информации - обычно для определения того, какой контроллер использовать, - но принцип точно такой же.

Это упрощает RewriteRule, так как вы не знаете, t необходимо создать параметр path :

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]

Те же правила об установке в подкаталоге все еще применяются, например

RewriteRule ^.*$ /mvc/index.php [L,QSA]


Флаги:

NC = Нет Случай (не чувствителен к регистру, не нужен, так как в шаблоне нет символов)

L = Last (он перестанет переписывать после этого Rewrite, поэтому убедитесь, что это последнее, что есть в вашем списке переписывающих)

QSA = Query String Apend, на всякий случай у вас есть что-то как ?like=penguins на конце, который вы хотите сохранить и передать index.php.

0
задан Pietro Bonfim 17 January 2019 в 02:26
поделиться

1 ответ

Почему бы и нет. Вы все еще можете сохранить его в папке public_html, изменив доступ к частному.

Никто не сможет получить доступ к папке извне.

Для этого вы можете использовать файл htaccess, чтобы ограничить весь доступ к папке.

Вот фрагмент, чтобы сделать это

RewriteEngine On
RewriteRule (^|/)folderName(/|$) - [F]

Как создать файл htaccess очень просто! перейдите в корневую папку, затем создайте имя файла с помощью .htaccess

0
ответ дан DAMMAK 17 January 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: