Перезапись Apache для имитации нового корня документа для каталога

#apache #.htaccess #mod-rewrite

#apache #.htaccess #mod-перезапись

Вопрос:

В настоящее время я использую веб-приложение (Elastik), которое в настоящее время не поддерживает установку в подкаталог. Поскольку в данный момент я не могу создавать поддомены на сервере, мне было интересно, могу ли я использовать правила перезаписи для перенаправления любого запроса, переданного из этого каталога, обратно на себя, поскольку все связанные файлы указаны в отношении корневого каталога. Я попробовал несколько вещей, и я думаю, что это самое близкое, что у меня есть:

 RewriteEngine on
RewriteBase /elastik/
RewriteCond %{REFERER} ^http://localhost/elastik/.*$
RewriteRule ^/(.*)$ $[1]
  

Но это все равно не работает! Кто-нибудь может помочь мне указать правильное направление?

Ответ №1:

Я понял это, используя htaccess и php вместе взятые. Я оставлю это здесь на случай, если кто-то еще столкнется с такой ситуацией, по которой я не смог найти никакой помощи в Интернете

Во-первых, вам нужно переместить все ваши обычные файлы веб-сайта в подкаталог, который я назвал «обычным» для этой цели, чтобы ваши файлы теперь выглядели так:

 >public_html
    >normal
        >index.php
        >other
        >files
    >elastik
        >all
        >elastic
        >files
  

Теперь создайте файл .htaccess, чтобы перенаправить все в index.php файл в public_html, который выглядит следующим образом:

 RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
  

И затем index.php файл в каталоге public_html должен выглядеть примерно так:

 <?php 
if(isset($_SERVER['HTTP_REFERER'])){
    if(strpos($_SERVER['HTTP_REFERER'], "localhost/elastik")){
    header("Location: /elastik".$_SERVER['REQUEST_URI']);
    }
    else{
    $uri = $_SERVER['REQUEST_URI'];
    header("Location: /normal".$uri);
    }
}
else{
    header("Location: /normal".$uri);
}
?>
  

Мне пришлось переместить мои php-включения, на которые ссылаются в описании, в корень документа, обратно в каталог public_html, но после того, как я это сделал, все остальное работает гладко