Нет необходимости в таком количестве строк, это только усложняет.
Все, что вам нужно, это 2 строки в .htaccess
:
rewriteengine on
#rewriterule-: ar1 path =relative. ar2 if relative, that to rewritebase.
rewriterule !^foo/bar/index\.php$ /foo/bar/index.php
#..assert ar1 dismatches correct url
В PHP
Вы можете вывести первый ввод rewriterule в PHP, используя:
<?=$_SERVER['REQUEST_URI'];
Это даст вам всю мощь и позволит вам делать все.Просто проанализируйте $_SERVER["REQUEST_URI"]
вручную, и вы можете echo
совершенно разных страниц в зависимости от значения $_SERVER["REQUEST_URI"]
.
Sec ошибок
Обратите внимание, что вашсервер может выполнить поиск пути или глючить путь перед перезаписью.(Вы не можете изменить это поведение без привилегий сервера.) Например, если пользователь посещает /foo////
, вы можете видеть только /foo/
или /foo
.И, например, если пользователь посещает ///foo
, вы можете видеть только /foo
.И, например, если пользователь заходит /a/../foo
, вы можете увидеть только /foo
.И, например, если пользователь посещает /a//b/../../foo
, вы можете видеть только /foo
или /a/foo
[потому что рабочие серверы с ошибками рассматривают множественные /
как отличные в контексте ..
, без шуток ].
С разрывом цепи
Перезапись разрывов цепи на cin, идентичная htaccess ∙ parentfolder ∙ относительная интерпретируемая rewriterule ∙ arg2.(Во-первых, лично я отключил бы прерывания цепи, чтобы уменьшить сложность правил, но, кажется, нет никакого способа сделать это.)
Решение с прерыванием цепи:
rewriteengine on
#rewriterule-: ar1 path =relative. ar2 if relative, that to rewritebase.
rewriterule ^ /foo/bar/index.php
#..circuit-breaking, so assert ar2 if absolute, htaccess parentfolder =root, else, htaccess parentfolder not in interpreted ar2.
Разрыв цепи и перезапись на основе незапланированного использования
Для разрыва цепи необходимо:
- arg2 [of rewriterule] ⇌ абсолютный.и родительская папка htaccess ⇌ root.
- arg2 ⇌ относительный.и эта папка не в интерпретируемом arg2.
Так что, когда эта папка ≠ root, прерывание цепи требует arg2 ⇌ относительный.когда arg2 ⇌ относительный, для прерывания цепи требуется… эта папка ⇌ не в интерпретированном arg2⏋.
Скажем, нам нужен разрыв цепи и родительская папка htaccess, находящаяся в интерпретируемом arg2, поэтому мы редактируем arg2 через базу перезаписи:
rewriteengine on
#rewriterule-: ar1 path =relative. ar2 if relative, that to rewritebase.
rewriterule ^ bar/index.php
#..circuit-breaking, so assert ar2 if absolute, htaccess parentfolder =root, else, htaccess parentfolder not in interpreted ar2.
rewritebase /foo
#..needs to be absolute [</> starting]. pathing [eg </../a/..> and </../..///ran/dom-f/oobar/./././../../..////////.//.>] allowed