I simply want to access the backend part via www.domain.com\admin and frontend by www.domain.com. What I did in my root .htaccess is :
Options -Indexes
# follow symbolic links
Options FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/admin/$
RewriteRule ^(admin)/$ /$1 [R=301,L]
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin(/.+)?$ /backend/web/$1 [L,PT]
RewriteCond %{REQUEST_URI} ^.*$
RewriteRule ^(.*)$ /frontend/web/$1
It redirects to the the frontend but doesn't work properly with the backend. Can't realize what is the problem because I am using the same lines of configurations at work and there everything is OK. Can it be because of the XAMPP? We work on Ubuntu and Apache server at my workplace. This is the frontend and backend ( they are similar ) also :
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]
EDIT: I DID IT!
What I was set in my httpd-vhost.conf was :
<VirtualHost *:8080>
ServerName fitness
DocumentRoot "c:/xampp/htdocs/fitness/frontend/web"
</VirtualHost>
And the problem was that I was redirecting my request to the frontend/web htaccess but what I really needed was the root .htaccess. So I had changed the DocumentRoot to c:/xampp/htdocs/fitness.
I always use the following way when setting up a new project when I am working in the office where we have ubuntu and it always works perfectly.
Follow these steps below, and create 2 virtual hosts with the name www.myapp.com and admin.myapp.com
1) Open terminal and type
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.
add the following code once the file opens.
<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) Close & save the file and then in terminal write
sudo a2ensite www.myapp.com.conf- open hosts file
sudo nano /etc/hostsand add in the end on a new line127.0.0.1 www.myapp.com. - Restart apache
sudo service apache2 restart
3) Repeat the above steps for the backend and change the file names and ServerName, Directory and DirectoryRoot respectively.
4) Just make sure you have a .htaccess file in the frontend/web and backend/web with the following
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
And thats it you wont need any other .htaccess file other than these now type in the browser www.myapp.com or admin.myapp.com and see it working.
来源:https://stackoverflow.com/questions/48955171/yii2-separate-front-and-backend-in-advanced-app-doesnt-work-on-xampp