• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Routing and $_SERVER['SCRIPT_NAME'] removal

#1
Hi, I have a website built using CodeIgniter 3.1.9.

I have Apache configured with the following RewriteRule as recommended here https://www.codeigniter.com/userguide3/g...x-php-file so that the index.php part of a url is optional.

Code:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

I noticed that the following url: www.example.com/index.phptest loads the same page as www.example.com/index.php/test. I had a look through the routing code in core/URI.php and saw that the following code was responsible:

Code:
...
if (isset($_SERVER['SCRIPT_NAME'][0]))
{
    if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0)
    {
        $uri = (string) substr($uri, strlen($_SERVER['SCRIPT_NAME']));
    }
    elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
    {
        $uri = (string) substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
    }
}
...

I replaced this code with the following to fix the issue:

Code:
...
if (isset($_SERVER['SCRIPT_NAME'][0]))
{
   if ($uri === $_SERVER['SCRIPT_NAME'])
   {
       $uri = '';
   }
   elseif (strpos($uri, $_SERVER['SCRIPT_NAME'] . '/') === 0)
   {
       $uri = (string) substr($uri, strlen($_SERVER['SCRIPT_NAME'] . '/'));
   }
   elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
   {
       $uri = (string) substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
   }
}
...

Additionally, I checked out a list of sites that use CodeIgniter and found the following with the same issue:
**links redacted**
Reply

#2
If you think this is a bug then you need to report it on Github.

You should never ever edit and change CodeIgniter system files.
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply


Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


  Theme © 2014 iAndrew  
Powered By MyBB, © 2002-2019 MyBB Group.