Просто переписать URL с .htaccess
: (идет в /
)
DirectoryIndex index.php
#Redirect to /special/laravel/public if you haven't already and the IP is okay
RewriteCond %{REMOTE_ADDR} ^1\.2\.3\.4*
RewriteCond %{REQUEST_URI} !^/special/laravel/public
RewriteRule ^(/special)(/laravel)?(.+) /special/laravel/public$2 [L]
#if IP does not match and you ARE in the folder, then Redirect to root
RewriteCond %{REMOTE_ADDR} !^1\.2\.3\.4*
RewriteCond %{REQUEST_URI} ^/special/laravel/public
RewriteRule .?/[R=301,L]
Я думаю, что будет работать , Я не тестировал его. Я могу добавить к нему, если понадобится. И, конечно же, для вашего случая использования вам может потребоваться добавить еще RewriteCond
s для проверки REMOTE_ADDR
.
Как мне справиться с этим:
.htaccess:
RewriteCond %{REQUEST_URI} !^/load_page.php$
RewriteRule ^(.+)$ /load_page.php [QSA, L]
Это заставляет сервер внутренне перенаправления load_page.php
, если запрашиваемый URL не load_page
. Без RewriteCond я считаю, что это вызовет бесконечную перенаправление. Это должно сработать, но я не тестировал его, потому что он отличается от моей реализации, поскольку моя также обрабатывает переписывание URLS, чтобы иметь завершающие слэши и никогда не показывать .php, что делает его немного более сложным и совершенно другим.
load_page.php
:
$SITE_ROOT = $_SERVER['DOCUMENT_ROOT'];
$URL = $_SERVER['REQUEST_URI'];
ob_start();
if (conditionOne){
//change $URL here if you need to or do nothing
} else if (conditionTwo){ //check the IP or whatever you want to here
if (aCondition){//if $URL starts with '/special'
$URL = str_ireplace('/special/','/special/laravel/public/',$URL,1);
}
if (is_dir($SITE_ROOT.$URL))$URL .='index.php';
}
if (!file_exists($SITE_ROOT.$URL))$URL = '/error/404.php';
include($SITE_ROOT.$URL);
$content = ob_get_clean();
echo $content;
Это то, что влияет. Пользователь не видит load_page.php
, и они не видят, что вы изменили URL-адрес на special/laravel/public
, но вы включили правильный файл.
Чтобы уточнить, хотите ли вы получить запрос на '/ special/index.php', чтобы фактически загрузить'/special/laravel/public/index.php', или я полностью отключен? – Jakar
Да, это именно то, что я хочу, учитывая уже существующие правила для перенаправления. – kdobrev
Хорошо. То, как я лично его обрабатываю, - это всегда мой внутренний ретранслятор '.htaccess' на'/dir/load_page.php', тогда мой 'load_page.php' обрабатывает все остальное. Если вы хотите сделать это таким образом, я могу дать вам свой «.htaccess», а затем другой материал - это несколько простой php. В противном случае я, вероятно, могу написать правила, которые вам нужно просто переписать URL-адрес внутри с помощью .htaccess, но последний менее надежный. – Jakar