logo
Apache Lounge
Webmasters

 

About Forum Index Downloads Search Register Log in RSS X


Keep Server Online

If you find the Apache Lounge, the downloads and overall help useful, please express your satisfaction with a donation.

or

Bitcoin

A donation makes a contribution towards the costs, the time and effort that's going in this site and building.

Thank You! Steffen

Your donations will help to keep this site alive and well, and continuing building binaries. Apache Lounge is not sponsored.
Post new topic   Forum Index -> Apache View previous topic :: View next topic
Reply to topic   Topic: Virtual host alias: 404 for index.php
Author
Amplifiction



Joined: 31 Aug 2024
Posts: 5
Location: Belgium

PostPosted: Sun 01 Sep '24 15:25    Post subject: Virtual host alias: 404 for index.php Reply with quote

Hello all,

Starting webdeveloper here, who wants to showcase a few websites to potential employers. To that end, I have set up a Linux (Mint) server and installed a LAMP stack on it, including SSL (CertBot) and ModSecurity.

I have set up a virtual host for my_domain.net. Browsing to https://my_domain.net successfully loads the index.html located under /var/www/my_domain.net.

I want to showcase a Laravel project, let's say under https://my_domain.net/laravel. For security reasons, I can't put the entire project under /var/www/my_domain.net/laravel. And so I have been trying to "link" the https://my_domain.net/laravel url to the 'public' subfolder of my project. I have tried to achieve this through symlinks and aliases. Since I would prefer to get this done with an alias, I'll be focusing on that method.

To rule out any problems originating in the complex Laravel project structure, I have created a /websites/test folder containing only a simple index.php file. (I have moved the 'websites' directory from my home folder to ensure that there are no ownership issues in the entire path.) The owner of the 'websites' folder and all of its contents is currently www-data, achieved by
Code:
sudo chown -R www-data:www-data /websites
sudo chmod -R 755 /websites

(I have also tried setting my own Linux user as owner, to no avail.)

The full content of /etc/apache2/sites-available/my_domain.net.conf:
Code:
<VirtualHost *:443>
    ServerName my_domain.net
    ServerAlias www.my_domain.net
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/my_domain.net

    RewriteEngine on
    RewriteCond %{SERVER_NAME} =my_domain.net
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

    Alias /test /websites/test
    <Directory /websites/test>
        Options Indexes FollowSymLinks
        AllowOverride All
            # This allows .htaccess files to override configurations.
        Require all granted
        SecRuleEngine Off
            # Turns off ModSecurity for directory. To be disabled in production.
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


'sudo apachectl configtest' outputs:
Code:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK

I'm not sure if this is relevant, but my "domain" is actually a No-Ip account. (So DDNS pointing to my IP.)

The website has been enabled using 'sudo a2ensite my_domain.net'.

Apache2 is running and I have restarted it whenever I made changes. ('sudo systemctl restart apache2')

Rewrite has been enabled by 'sudo a2enmod rewrite'.

The problem: browsing to https://my-domain.net/test results in a 404 error. What am I getting wrong?
Back to top
Stray78



Joined: 15 Apr 2024
Posts: 22
Location: USA

PostPosted: Mon 02 Sep '24 6:28    Post subject: Reply with quote

Quote:
# Alias: Maps web paths into filesystem paths and is used to
# access content that does not live under the DocumentRoot.
# Example:
# Alias /webpath /full/filesystem/path


Code:
/laravel /var/www/my_domain.net/laravel
Back to top
Amplifiction



Joined: 31 Aug 2024
Posts: 5
Location: Belgium

PostPosted: Mon 02 Sep '24 10:53    Post subject: Reply with quote

Stray78 wrote:
Quote:
# Alias: Maps web paths into filesystem paths and is used to
# access content that does not live under the DocumentRoot.
# Example:
# Alias /webpath /full/filesystem/path


Code:
/laravel /var/www/my_domain.net/laravel


Amplifiction wrote:
For security reasons, I can't put the entire project under /var/www/my_domain.net/laravel. And so I have been trying to "link" the https://my_domain.net/laravel url to the 'public' subfolder of my project.

I don’t quite understand your reply. If I were to use /var/www/my_domain.net/laravel, why would I need an alias in the first place?
For example, I have just created the folder /var/www/my_domain/no_alias, which only contains a simple .php file. Browsing to https://my_domain/no_alias loads that .php fine. Didn't even have to create an alias. (Or change ownership from my user to www-data, which surprised me.)

To clarify, my Laravel project consists of multiple subfolders, and the subfolder ‘public’ contains files the visitor should have access to. The rest, like the sqlite database, should not be accessible.
Back to top
Amplifiction



Joined: 31 Aug 2024
Posts: 5
Location: Belgium

PostPosted: Mon 02 Sep '24 17:59    Post subject: Re: Virtual host alias: 404 for index.php Reply with quote

Solved by moving the Alias and <Directory> directives from
/etc/apache2/sites-available/my_domain.conf (virtual host config)
to
/etc/apache2/sites-available/my_domain-le-ssl.conf (virtual host config for https)

Also reverted back to <VirtualHost *:80> in my_domain.conf.
Back to top
James Blond
Moderator


Joined: 19 Jan 2006
Posts: 7360
Location: Germany, Next to Hamburg

PostPosted: Tue 03 Sep '24 13:25    Post subject: Re: Virtual host alias: 404 for index.php Reply with quote

Amplifiction wrote:

I want to showcase a Laravel project, let's say under https://my_domain.net/laravel. For security reasons, I can't put the entire project under /var/www/my_domain.net/laravel. And so I have been trying to "link" the https://my_domain.net/laravel url to the 'public' subfolder of my project.


Why not use a simple password protection via Require user? [1][2]. Not need to change the other working config.


[1] https://httpd.apache.org/docs/2.4/mod/mod_authz_user.html
[2] https://httpd.apache.org/docs/2.4/mod/mod_auth_basic.html
Back to top
Amplifiction



Joined: 31 Aug 2024
Posts: 5
Location: Belgium

PostPosted: Tue 03 Sep '24 19:45    Post subject: Re: Virtual host alias: 404 for index.php Reply with quote

Why not use a simple password protection via Require user? [1][2]. Not need to change the other working config.


[1] https://httpd.apache.org/docs/2.4/mod/mod_authz_user.html
[2] https://httpd.apache.org/docs/2.4/mod/mod_auth_basic.html[/quote]

I'm not sure what you're suggesting. You mean putting the entire project under https://my_domain.net/laravel, and password protecting all files and folders there, except for the public folder? Wouldn't that still leave me with the challenge of making sure that browsing to https://my_domain.net/laravel opens https://my_domain.net/laravel/public/index.php? So I would still need an alias, I think?

On top of that, I have discovered a second challenge. While browsing to https://my_domain.net/laravel finally loads the /websites/laravel/public/index.php file, images and other pages are not found.

In the Apache access log, I see that a get request is being made for /images/x.jpg. When I compare this to the working /test alias I set up, this should be /laravel/images/x.jpg.

To clarify, my virtual host file contains two similar aliases. The only differences are the alias name, as well as the folder name.

Code:

        Alias /laravel /websites/laravel/public
        <Directory /websites/laravel/public>
            AllowOverride All
                # This allows .htaccess files to override configurations
            Require all granted
                # Access is allowed to everyone.
            # SecRuleEngine Off
                # Turns off ModSecurity for directory. To be disabled in production.
        </Directory>

        Alias /test /websites/test/public
        <Directory /websites/test/public>
            AllowOverride All
                # This allows .htaccess files to override configurations.
            Require all granted
                # Access is allowed to everyone.
            # SecRuleEngine Off
                # Turns off ModSecurity for directory. To be disabled in production.
        </Directory>


Both public folders contain an index.php file, as well as an images subfolder. For /test, the images load fine. For /laravel, not so.

I find this bizarre, as I have recently successfully deployed the Laravel project on the servers of a (soon to be paid) webhosting firm. There, I simply added a subdomain (laravel.my_domain.net) and using a GUI, "linked" that subdomain to the project's public folder. By which I don't mean to judge either the firm nor Apache; simply pointing out that the project worked fine, albeit in a different environment.

Anyway, I'm not insisting on aliases or any other method. I would only like to learn how to deploy Laravel projects to my_domain.net/x URL's, as I do not have the luxury of subdomains. Any advice on how to achieve this would be greatly appreciated, as I have spent many hours trying to do so.
Back to top
James Blond
Moderator


Joined: 19 Jan 2006
Posts: 7360
Location: Germany, Next to Hamburg

PostPosted: Sun 08 Sep '24 18:21    Post subject: Reply with quote

There are easy tutorials like https://www.slingacademy.com/article/how-to-run-laravel-in-a-subdirectory-of-a-domain/

Yes, that requires to modify the laravel config and the code.
Back to top
Amplifiction



Joined: 31 Aug 2024
Posts: 5
Location: Belgium

PostPosted: Thu 26 Sep '24 20:06    Post subject: Reply with quote

I solved this a few weeks ago, and realized I hadn't provided an update.

In the end I adjusted the code of the project. I also kept the alias. No other changes, like for example to .htaccess.

While I have seen tutorials/guides that (claim to) solve this problem for pure Laravel projects without changing the code, apparently this isn't possible with Inertia.

Using Inertia's shared data, I configured a prefix string ('/laravel') that I added in front of routes in my React components. At least this way, the prefix can be easily adjusted if it ever gets deployed to another website.

Thanks to everyone who took the time to help me.
Back to top


Reply to topic   Topic: Virtual host alias: 404 for index.php View previous topic :: View next topic
Post new topic   Forum Index -> Apache