2017-01-27 5 views
1

Я работаю над новым сайтом, который должен заменить старый. Новый веб-сайт будет использовать Phalcon, и он использует собственную систему маршрутизации. Новый сайт будет доступен с использованием www.mydomain.com, как и предыдущий. Новый сайт DocumentRoot - /var/www/mydomain-www, а старый - /var/www/mydomain-platform.Перепишите на другой корень документа

В этой «платформе» есть несколько «веб-сервисов», которые используют многие другие приложения (включая iOS и приложения для Android). К сожалению, новый веб-сайт также должен использовать эти веб-службы. :-(

В общем, есть файл PHP для каждого вызова API, и все эти файлы находятся в корне старого веб-сайта, а именно /var/www/mydomain-platform. Я знаю, что это беспорядок, но я должен иметь дело с этим, я унаследовал . он в старом корне сайта есть также .htaccess файл, который содержит переопределение маршрут для каждого вызова API, в правом файл PHP Они выглядят как:.

RewriteRule ^ws/event/games(.*)$ /ws_events.php$1 
RewriteRule ^ws/favourites/list(.*)$ /ws_teams_favorites.php$1 

мне нужно найти способ, чтобы переписать все url для www.mydomain.com/ws/(.*) в каталог /var/www/mydomain-platform/ws, потому что файлы веб-служб есть, и я действительно не хочу переместить их в корневую директорию нового веб-сайта.

Я думал создать символическую ссылку var/www/mydomain.www/ws, указывая на каталог /var/www/mydomain-platform/ws, но я уверен, что ниже конфигурация vhost не понравится, потому что она перенаправит все на /var/www/mydomain/public.

Я хотел бы поместить эти перенаправления в файл .htaccess и оставить его таким, каким он есть.

Любая идея?

<VirtualHost *:80> 
    ServerName www.mydomain.com 
    ServerAdmin [email protected] 
    DocumentRoot "/var/www/mydomain-www" 
    ErrorLog "${APACHE_LOG_DIR}/www.mydomain.com-error_log" 
    CustomLog "${APACHE_LOG_DIR}/www.mydomain.com-access_log" common 

    AllowEncodedSlashes On 
    AddDefaultCharset UTF-8 

    <Directory /var/www/mydomain-www> 
     AuthType None 
     AllowOverride all 
     Require all granted 

     <IfModule rewrite_module> 
      RewriteEngine on 
      RewriteRule ^$ public/ [L] 
      RewriteRule ((?s).*) public/$1 [B,NE,L] 
     </IfModule> 
    </Directory> 

    <Directory /var/www/mydomain-www/public> 
     <IfModule rewrite_module> 
      RewriteEngine on 
      RewriteCond %{REQUEST_FILENAME} !-d 
      RewriteCond %{REQUEST_FILENAME} !-f 
      RewriteRule ^((?s).*)$ index.php?_url=/$1 [B,NE,QSA,L] 
     </IfModule> 
    </Directory> 

    <FilesMatch "(?i)\.php$"> 
     Require all denied 
    </FilesMatch> 

    <FilesMatch "index\.php$"> 
     Require all granted 
    </FilesMatch> 

</VirtualHost> 

ответ

1

Вы можете переместить ws папку /var/www/mydomain-www каталога или создать символическую ссылку в новом каталоге. Тогда вам необходимо изменить правила в /var/www/mydomain-www пропустить что-нибудь с /ws/ впереди:

<Directory /var/www/mydomain-www> 
    AuthType None 
    AllowOverride all 
    Require all granted 

    <IfModule rewrite_module> 
     RewriteEngine on 
     RewriteRule ^$ public/ [L] 
     RewriteRule ^/?((?!ws2/|ws3/).*)$ public/$1 [B,NE,L,NC] 
    </IfModule> 
</Directory> 
+0

Собственно регулярное выражение не работает, но я закрепили?!? 'RewriteRule (^ (/ ws2/| WS3 /) . *) public/$ 1 [B, NE, L] '. Должна быть группа внешнего захвата, или URL не будет перенаправлен на 'public/$ 1'. А также флаги должны быть '[B, NE, L]'. – noun

+0

ОК спасибо, я подтвердил свой ответ в соответствии с вашими комментариями. – anubhava