I got a homemade php rooter with an htaccess rewriting rule but my public files are always getting catched by the rooter after I leave my landing page, blocking thoses sources on my other pages.
index.php rooter :
JavaScript
x
if(isset($_GET['url']) && !empty($_GET['url'])){
// Explosion of the URL
$url = explode('/', $_GET['url']);
$controllerName = "Controllers\".ucfirst(array_shift($url)).'Controller';
$methodName = strtolower(array_shift($url));
$param=strtolower(array_shift($url));
$controller = new $controllerName;
if($param!=null){
$controller->$methodName($param);
}
else{
$controller->$methodName();
}
}
else{
header("Location: Views/landing.php");
}
My htaccess :
JavaScript
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [NC,L]
I should maybe change the htaccess ? but how ?
Thx
Advertisement
Answer
Your client-side resources should be referenced like this:
JavaScript
<link href="/css/Dashboard/custom.css" type="text/css" rel="stylesheet" />
<link href="/images/favicon/favicon.ico" rel="icon" type="image/png" />
<script src="/bootstrap/dist/js/bootstrap.bundle.min.js" type="text/javascript"></script>
etc. So, note the prepended slash character (/
) in the HTML attributes href
and src
. It references the location of the document root: /path/to/sample-mvc/public
.
And, just as an example: here is the virtual host of my MVC-based app. Maybe it helps.
JavaScript
<VirtualHost *:80>
ServerName local.myapp
DocumentRoot "/path/to/sample-mvc/public"
<Directory "/path/to/sample-mvc/public">
# For developing allow just the development machine
# (presuming that all dirs & files are inaccessible by default).
Require ip 127.0.0.1
# When Options is set to "off", then the RewriteRule directive is forbidden!
Options FollowSymLinks
# Activate rewriting engine.
RewriteEngine On
# Allow pin-pointing to index.php using RewriteRule.
RewriteBase /
# Rewrite url only if no physical folder name is given in url.
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite url only if no physical file name is given in url.
RewriteCond %{REQUEST_FILENAME} !-f
# Parse the request through index.php.
# Notice the absence of query string ("?url=...").
# I use "FastRoute" as router.
RewriteRule ^(.*)$ index.php [QSA,L]
</Directory>
</VirtualHost>