Правило вашего переписывания выглядит почти нормально.
Сначала убедитесь, что ваш файл .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.
Почему бы и нет. Вы все еще можете сохранить его в папке public_html, изменив доступ к частному.
Никто не сможет получить доступ к папке извне.
Для этого вы можете использовать файл htaccess, чтобы ограничить весь доступ к папке.
Вот фрагмент, чтобы сделать это
RewriteEngine On
RewriteRule (^|/)folderName(/|$) - [F]
Как создать файл htaccess очень просто! перейдите в корневую папку, затем создайте имя файла с помощью .htaccess