Yii2:高级应用程序中的独立前端和后端在 XAMPP 上不起作用
Yii2: Separate front and backend in advanced-app doesn't work on XAMPP
我只想通过 www.domain.com\admin
访问后端部分,通过 www.domain.com
访问前端。我在根 .htaccess
中所做的是:
Options -Indexes
# follow symbolic links
Options FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/admin/$
RewriteRule ^(admin)/$ / [R=301,L]
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin(/.+)?$ /backend/web/ [L,PT]
RewriteCond %{REQUEST_URI} ^.*$
RewriteRule ^(.*)$ /frontend/web/
它重定向到前端,但无法与后端正常工作。无法意识到问题是什么,因为我在工作中使用相同的配置行并且一切正常。难道是因为XAMPP
?我们在我工作场所的 Ubuntu
和 Apache
服务器上工作。这也是前端和后端(它们很相似):
AddDefaultCharset utf-8
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
# Make the backend accessible via url: http://site/admin
RewriteRule ^admin$ $admin.php [L]
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
RewriteRule ^static - [L]
编辑:我做到了!
我在 httpd-vhost.conf
中设置的是:
<VirtualHost *:8080>
ServerName fitness
DocumentRoot "c:/xampp/htdocs/fitness/frontend/web"
</VirtualHost>
问题是我将请求重定向到 frontend/web
htaccess
,但我真正需要的是根 .htaccess
。所以我将 DocumentRoot
更改为 c:/xampp/htdocs/fitness
。
当我在我们有 ubuntu
的办公室工作时,在设置新项目时,我总是使用以下方式,并且它总是完美无缺。
按照以下步骤,创建 2 个虚拟主机,名称分别为 www.myapp.com
和 admin.myapp.com
1) 打开终端并输入
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/www.myapp.com.conf
.
sudo nano /etc/apache2/sites-available/www.myapp.com.conf
.
文件打开后添加以下代码。
<VirtualHost *:80>
ServerName www.myapp.com
DocumentRoot "/path/to/project/root/frontend/web"
<Directory "/path/to/project/root/frontend/web">
# use mod_rewrite for pretty URL support
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# use index.php as index file
DirectoryIndex index.php
# ...other settings...
</Directory>
</VirtualHost>
2) 关闭并保存文件,然后在终端中写入
sudo a2ensite www.myapp.com.conf
- 打开主机文件
sudo nano /etc/hosts
并在末尾添加一个新行 127.0.0.1 www.myapp.com
.
- 重启apache
sudo service apache2 restart
3) 对 backend
重复上述步骤,分别更改文件名和 ServerName
、Directory
和 DirectoryRoot
。
4) 请确保您在 frontend/web
和 backend/web
中有一个 .htaccess
文件,其中包含以下
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
就是这样,除了现在在浏览器中输入 www.myapp.com
或 admin.myapp.com
之外,您不需要任何其他 .htaccess
文件并查看它是否正常工作。
我只想通过 www.domain.com\admin
访问后端部分,通过 www.domain.com
访问前端。我在根 .htaccess
中所做的是:
Options -Indexes
# follow symbolic links
Options FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/admin/$
RewriteRule ^(admin)/$ / [R=301,L]
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin(/.+)?$ /backend/web/ [L,PT]
RewriteCond %{REQUEST_URI} ^.*$
RewriteRule ^(.*)$ /frontend/web/
它重定向到前端,但无法与后端正常工作。无法意识到问题是什么,因为我在工作中使用相同的配置行并且一切正常。难道是因为XAMPP
?我们在我工作场所的 Ubuntu
和 Apache
服务器上工作。这也是前端和后端(它们很相似):
AddDefaultCharset utf-8
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
# Make the backend accessible via url: http://site/admin
RewriteRule ^admin$ $admin.php [L]
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
RewriteRule ^static - [L]
编辑:我做到了!
我在 httpd-vhost.conf
中设置的是:
<VirtualHost *:8080>
ServerName fitness
DocumentRoot "c:/xampp/htdocs/fitness/frontend/web"
</VirtualHost>
问题是我将请求重定向到 frontend/web
htaccess
,但我真正需要的是根 .htaccess
。所以我将 DocumentRoot
更改为 c:/xampp/htdocs/fitness
。
当我在我们有 ubuntu
的办公室工作时,在设置新项目时,我总是使用以下方式,并且它总是完美无缺。
按照以下步骤,创建 2 个虚拟主机,名称分别为 www.myapp.com
和 admin.myapp.com
1) 打开终端并输入
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/www.myapp.com.conf
.sudo nano /etc/apache2/sites-available/www.myapp.com.conf
.
文件打开后添加以下代码。
<VirtualHost *:80>
ServerName www.myapp.com
DocumentRoot "/path/to/project/root/frontend/web"
<Directory "/path/to/project/root/frontend/web">
# use mod_rewrite for pretty URL support
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# use index.php as index file
DirectoryIndex index.php
# ...other settings...
</Directory>
</VirtualHost>
2) 关闭并保存文件,然后在终端中写入
sudo a2ensite www.myapp.com.conf
- 打开主机文件
sudo nano /etc/hosts
并在末尾添加一个新行127.0.0.1 www.myapp.com
. - 重启apache
sudo service apache2 restart
3) 对 backend
重复上述步骤,分别更改文件名和 ServerName
、Directory
和 DirectoryRoot
。
4) 请确保您在 frontend/web
和 backend/web
中有一个 .htaccess
文件,其中包含以下
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
就是这样,除了现在在浏览器中输入 www.myapp.com
或 admin.myapp.com
之外,您不需要任何其他 .htaccess
文件并查看它是否正常工作。