Welcome Guest, Not a member yet? Register   Sign In
CI in apache userdirs (domain.com/~user/public/ci)
#3

(This post was last modified: 03-19-2021, 02:35 PM by evansharp.)

(03-18-2021, 04:05 PM)John_Betong Wrote: The “public/index.php” has a path set to “app/Config/Paths.php”. Try making the relevant path adjustments in Paths.php

Hi John,

Thanks for the quick reply!

I don't think the solution is in Paths.php. Nothing about the framework structure is being changed and components not found, just the install location. The Paths.php entries are all relative system paths and they are all still correct. Meanwhile, the 404 I'm getting is the CI-generated 404 page. So the framework is being located by apache ok, bootstrapped, and launched without issue.

I think the issue has to do with routing. The 404 page says that the router is interpreting the url segments incorrectly by not applying the specified base url; it is interpreting the apache userdir "subdirectory" as the requested controller.

Note that I'm using this apache module: https://httpd.apache.org/docs/2.4/mod/mod_userdir.html

What else could confuse the router this way if I've already set the baseurl variable (in .env) and adjusted the ../ci4/public/.htaccess BaseRewrite?


Quote:The directory structure looks like this:
/home/username/public/ci4/app | system | public | etc.

The url for the app then looks like:
http://domain.com/~username/ci4

/home/username/public/ci4/public/.htaccess
Code:
# Disable directory browsing
Options All -Indexes

# ----------------------------------------------------------------------
# Rewrite engine
# ----------------------------------------------------------------------

# Turning on the rewrite engine is necessary for the following rules and features.
# FollowSymLinks must be enabled for this to work.
<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On

    # If you installed CodeIgniter in a subfolder, you will need to
    # change the following line to match the subfolder you need.
    # http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase

    RewriteBase /~username/ci4/

    # Redirect Trailing Slashes...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
      RewriteRule ^ %1 [L,R=301]

    # Rewrite "www.example.com -> example.com"
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

    # Checks to see if the user is attempting to access a valid file,
    # such as an image or css document, if this isn't true it sends the
    # request to the front controller, index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([\s\S]*)$ index.php/$1 [L,NC,QSA]

    # Ensure Authorization header is passed along
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

<IfModule !mod_rewrite.c>
    # If we don't have mod_rewrite installed, all 404's
    # can be sent to index.php, and everything works as normal.
    ErrorDocument 404 index.php
</IfModule>

# Disable server signature start
    ServerSignature Off
# Disable server signature end

/home/username/public/ci4/app/Config/App.php

PHP Code:
<?php

namespace Config;

use 
CodeIgniter\Config\BaseConfig;

class 
App extends BaseConfig
{
    
/**
     * --------------------------------------------------------------------------
     * Base Site URL
     * --------------------------------------------------------------------------
     *
     * URL to your CodeIgniter root. Typically this will be your base URL,
     * WITH a trailing slash:
     *
     *    http://example.com/
     *
     * If this is not set then CodeIgniter will try guess the protocol, domain
     * and path to your installation. However, you should always configure this
     * explicitly and never rely on auto-guessing, especially in production
     * environments.
     *
     * @var string
     */
    
public $baseURL 'https://domain.com/~username/ci4/';

... 

404 error page source:

Code:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>404 Page Not Found</title>

    <style>
    div.logo {
        height: 200px;
        width: 155px;
        display: inline-block;
        opacity: 0.08;
        position: absolute;
        top: 2rem;
        left: 50%;
        margin-left: -73px;
    }
    body {
        height: 100%;
        background: #fafafa;
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
        color: #777;
        font-weight: 300;
    }
    h1 {
        font-weight: lighter;
        letter-spacing: 0.8;
        font-size: 3rem;
        margin-top: 0;
        margin-bottom: 0;
        color: #222;
    }
    .wrap {
        max-width: 1024px;
        margin: 5rem auto;
        padding: 2rem;
        background: #fff;
        text-align: center;
        border: 1px solid #efefef;
        border-radius: 0.5rem;
        position: relative;
    }
    pre {
        white-space: normal;
        margin-top: 1.5rem;
    }
    code {
        background: #fafafa;
        border: 1px solid #efefef;
        padding: 0.5rem 1rem;
        border-radius: 5px;
        display: block;
    }
    p {
        margin-top: 1.5rem;
    }
    .footer {
        margin-top: 2rem;
        border-top: 1px solid #efefef;
        padding: 1em 2em 0 2em;
        font-size: 85%;
        color: #999;
    }
    a:active,
    a:link,
    a:visited {
        color: #dd4814;
    }
</style>
</head>
<body>
    <div class="wrap">
        <h1>404 - File Not Found</h1>

        <p>
        Controller or its method is not found: \App\Controllers\~username::ci4    
</p>
    </div>
</body>
</html>
Reply


Messages In This Thread
RE: CI in apache userdirs (domain.com/~user/public/ci) - by evansharp - 03-19-2021, 02:20 PM



Theme © iAndrew 2016 - Forum software by © MyBB