Jump to content

htaccess - internal redirects problem - cpu load


markjohnson

Recommended Posts

Hi,

 

I have the following in my .htaccess file:

 

Code:

 

php_flag magic_quotes_gpc off
Options +FollowSymlinks 
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME}   !-s
RewriteRule ^admin(.*)$ admin/index.php [L]
RewriteCond %{REQUEST_FILENAME}   !-s
RewriteCond %{REQUEST_FILENAME}   !-d
RewriteRule .* index.php [L,QSA]

 

The idea is to fetch the entire URL into index.php, e.g. http://site.com/page1/page2/3928

 

index.php would then explode the uri 'page1/page2/3928' into three parts

 

page1/page2 list all the products (i.e. if $uri[2] is not set, then list all products). This works fine.

 

page1/page2/3928 is supposed to present product detail, which it does, but for some reason it also runs the query for product listing (page1/page2) not only once but several times.

 

When I click on page1/page2/3928, mysqyl shows me several instances of product listing query which shouldn't be running at all.

 

My guess is that /page1/page2/3928 is also internally redirecting about 10 times to /page1 as well.

 

The rewrite log file show many instances of the following:

 

Code:

 

127.0.0.1 - - [25/Jan/2010:02:44:58 +0000] [site/sid#1656600][rid#28e14c8/initial] (2) [perdir C:/xampp/htdocs/site/public_html/] trying to replace prefix C:/xampp/htdocs/site/public_html/ with /
127.0.0.1 - - [25/Jan/2010:02:44:58 +0000] [site/sid#1656600][rid#28e14c8/initial] (1) [perdir C:/xampp/htdocs/site/public_html/] internal redirect with /index.php [iNTERNAL REDIRECT]
127.0.0.1 - - [25/Jan/2010:02:44:58 +0000] [site/sid#1656600][rid#2c53088/initial/redir#1] (3) [perdir C:/xampp/htdocs/site/public_html/] strip per-dir prefix: C:/xampp/htdocs/site/public_html/index.php -> index.php
127.0.0.1 - - [25/Jan/2010:02:44:58 +0000] [site/sid#1656600][rid#2c53088/initial/redir#1] (3) [perdir C:/xampp/htdocs/site/public_html/] applying pattern '(.*)' to uri 'index.php'
127.0.0.1 - - [25/Jan/2010:02:44:58 +0000] [site/sid#1656600][rid#2c53088/initial/redir#1] (3) [perdir C:/xampp/htdocs/site/public_html/] strip per-dir prefix: C:/xampp/htdocs/site/public_html/index.php -> index.php
127.0.0.1 - - [25/Jan/2010:02:44:58 +0000] [site/sid#1656600][rid#2c53088/initial/redir#1] (3) [perdir C:/xampp/htdocs/site/public_html/] applying pattern '^(.+)$' to uri 'index.php'
127.0.0.1 - - [25/Jan/2010:02:44:58 +0000] [site/sid#1656600][rid#2c53088/initial/redir#1] (1) [perdir C:/xampp/htdocs/site/public_html/] pass through C:/xampp/htdocs/site/public_html/index.php

 

Any help will be appreciated.

 

Many thanks!

Link to comment
Share on other sites

*bump*

 

For further clarification, here are the two queries, only one of which should run:

 

// This function looks at the uri "/whatever-product-name-id-2039" and extracts the id at the end: 2039

product_id($uri[1]);

 

// Run only if end of uri is a number

if (product_id($uri[1])) {

 

//this runs fine, which it should.

$qryDisplayProduct = "SELECT * FROM content WHERE id = ".content_id($path[1]);

 

} else {

//for some reason, mysql shows several processes for this query which should NOT run. Not only it runs but several instances clogging up the CPU.

$qryListProducts = "SELECT * FROM content ORDER BY `date` DESC";

}

 

In light of the above from ReWriteLog, am I right in at least assuming that this is due to internal redirects?

 

What am I doing wrong?

Link to comment
Share on other sites

For further info on the problem:

 

This is what index.php does right in the beginning:

 

$uri = preg_replace("/\/+/", "/", substr($_SERVER["REQUEST_URI"], strlen($cms_path)));
if(substr($uri, 0, 1) == "/") $uri = substr($uri, 1);
if(strpos($uri, "?"))
$uri = substr($uri, 0, strpos($uri, "?"));
if ($uri=="") $uri="/";

$path=explode("/",$uri);

It just takes a url like site.com/categoryA/categoryB/product-name-id-1234 and breaks it down like:

 

$path[0]=categoryA

$path[1]=categoryB

$path[2]=product-name-id-1234

 

OR, sometimes:

 

site.com/categoryA/product-name-id-5678

 

which is broken down as:

 

$path[0]=categoryA

$path[1]=product-name-id-5678

 

The php script then checks $path[1] for a pattern like this: 'id-1234' If it finds it, it runs the query for displaying product details.

 

If the pattern doesn't match, it simply lists all the products in categoryA.

 

The problem that I am encountering now is that when it is given this URL:

 

site.com/categoryA/product-name-id-5678

 

It is showing the product details page, which is fine, but it is also running Product list query several times, raising CPU usage to 100%.

 

I think it is quite obvious, looking at the ReWriteLog that it is due to internal redirects to index.php

 

And if I am right, I need to know how to stop internal redirection.

 

Thanks

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.