Я работаю над новым сайтом, который должен заменить старый. Новый веб-сайт будет использовать 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>
Вы можете переместить папку 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>
RewriteRule (^(?!/?ws2/|ws3/).*) public/$1 [B,NE,L]
. Должна быть внешняя группа захвата, иначе URL не будет перенаправлен вpublic/$1
. А также флаги должны быть[B,NE,L]
.