Переписать в другой корень документа

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, потому что файлы веб-служб есть, и я не знаю, t действительно хотят переместить их в корневой каталог нового веб-сайта.

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

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

Есть идеи?

<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>
Теги:
.htaccess
url-rewriting

1 ответ

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] .
  • 0
    Хорошо, спасибо, я обновил свой ответ в соответствии с вашими комментариями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню