Skip to main content

PHP : Set document root to be a subdirectory without .htaccess or Virtualhost

PHP : Set document root to be a subdirectory without .htaccess or Virtualhost
Recently I faced a problem with hosting a website on a server to which I have limited access. I was provided with permission only to a sub-directory on the server.
I'm habituated to use relative paths, but my root points to the root of server and not my sub-directory. This forced me to use absolute paths at every point.
I searched for the solution and end up with two results:
.htaccess ot Virtualhost
I never tried to understand .htaccess and I don't have access to set Virtualhost. This forced me to try bit harder and here is the outcome.

I've created a file named rootpath.php on root directory of my website.
(Note: this is not root '/' of the web server, but my sub-directory)
Its contents are as follows:
    $relative_path = "/subdirectory";
    $server_url = $_SERVER["SERVER_NAME"];

    $root = "http://" . $server_url. $relative_path;
Now, I include this file on top of every file.
Eg: <?php require('rootpath.php'); ?>
and append all paths with <?php print $root; ?>
Eg: <a href="<?php print $root; ?>/index.php">
Note: Initially I used './' and '../' notation, but it won't work always. Consider the following case, which I faced:
I defined a common header for all the pages and stored it in header.php, which in-turn imports all the necessary scripts from scripts.php.
Now, if you import header.php from contact/contact.php, it work work properly because scripts.php is loaded relatively in header.php and now the control searches it in contact directory.


Post a Comment

Popular posts from this blog

Ubuntu: Access a usb flash drive from the terminal

    1. Find what the drive is called You'll need to know what the drive is called to mount it. To do that fire off: sudo fdisk -l You're looking for a partition that should look something like:   /dev/sdb1 . Remember what it's called. 2. Create a mount point Create a new directory in   /media   so you can mount the drive onto the filesystem: sudo mkdir /media/usb 3. Mount! sudo mount /dev/sdb1 /media/usb When you're done, just fire off: sudo umount /media/usb Source: StackOverflow

Code for Php based online Treasure Hunt

Hello guys. Some time back I organized an online treasure hunt as part of an event at my college. I thought of sharing the code with you, as you might find it useful. So, I uploaded it on github and here is the link to my repository. Download it from here , and enjoy organizing the game

Java: Use BigInteger in for-loop

In my previous post , I mentioned a way to handle large integers by using BigInteger. Now I'm going to provide a very important usage of it. We often use for-loop. So here is the way to use it: Ordinary integers: for(int i = 1; i <= n; i++) {  //Task to do } BigInteger: for (BigInteger bi = BigInteger.valueOf(1);                 bi.compareTo(n) <= 0;                 bi = bi.add(BigInteger.ONE)) { //Task to do } here n is a BigInteger variable.