• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 490
  • Last Modified:

Mod Rewrite - Pages load fine, but facebook and google think 404

I need someone with experience using mod_rewrite.

I have a connect script running in sub director /health/ (you can see the connect script below).

The connect script is in file index.php. It populates data from remote DB with urls that appear like so:

/health/index.php?resource=/assets/heart

I would like them to appear like this:

/health/assets/heart

When I changed the request handler from:

"request_handler_uri=" . urlencode("/index.php?resource="),

To

"request_handler_uri=" . urlencode("/health"),

The url structure appears corectly, yet I get 404.

So I changed the htaccess to:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /health/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule index.php(.*)$ index.php?resource=/$1 [QSA]
RewriteRule ^(.*)$ index.php?resource=/$1 [QSA]
</IfModule>

So the page loads fine, I can see it etc, but not google or facebook etc. When I test using
developers.facebook.com/tools/debug/og/object

Facebook returns error "the server responded 404 error".

Any ideas?

<?php

$api_uri = "http://web.contentsource.com/blahblah";

$parameters = array(
	"apikey"				=> "5551212",
	"format"				=> "atom",
	"links"					=> "resource-path",
	"styles"				=> "enhanced",
	"content_only"			=> "false",
	"prettyprint"			=> "false",
	"request_handler_uri"	=> "http://www.mydomain.com/health/"
);

if (array_key_exists("resource", $_GET))
{
	$resource = urlencode($_GET['resource']);
}

if (!isset($resource) || $resource == "/")
{
	//default content uri goes here	
	$resource = "/assets/~default";
}

$request_uri = $api_uri . $resource . "?" . http_build_query($parameters);

$curl = curl_init($request_uri);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 5);
$response = curl_exec($curl);
    
header("Content-type: text/html; charset=utf-8");


/*$pattern='#<entry(.*)\<content type=\"xhtml\">#si';
preg_match($pattern,$response,$piece);*/



$pattern='#\<id>(.*)\<\/id>#si';
preg_match($pattern,$response,$piece);

$pattern='#\<summary type=\"text\">(.*)\<\/summary>#si';
preg_match($pattern,$response,$description);

$pattern='#\<author>(.*)\<\/author>#si';
preg_match($pattern,$response,$author);

$pattern='#\<updated>(.*)\<\/updated>#si';
preg_match($pattern,$response,$updated);


$response=str_replace($piece[0],"",$response);
$response=str_replace($description[0],"",$response);
$response=str_replace($author[0],"",$response);
$response=str_replace($updated[0],"",$response);


$pattern='#\<title>(.*)\<\/title>#si';
preg_match($pattern,$response,$title);
$title=$title[0];

$pattern='#\<summary type=\"text\">(.*)\<\/summary>#si';
preg_match($pattern,$response,$description);
$description='<meta name="description" content=\''.$description[1].'\'>';

$pattern='#<link(.*)/>#U';
preg_match_all($pattern,$piece[0],$links);
$links=$links[0];

$new_content = strip_tags($response);
$new_content = eregi_replace("<head[^>]*>.*</head>"," ",$new_content);
$new_content = eregi_replace("<script[^>]*>.*</script>"," ",$new_content);
$new_content = eregi_replace("<style[^>]*>.*</style>"," ",$new_content);
$new_content = eregi_replace("<[^>]*>"," ",$new_content);
$new_content = eregi_replace("&nbsp;","",$new_content);

$resource = urldecode($resource);
$theurl = "http://www.mydomain.com/health" . $resource;
?>

Open in new window

0
cptnem0
Asked:
cptnem0
1 Solution
 
babuno5Commented:
your code seems to be fine

What can be checked now is when you make request from facebook check your apache access log and see for what url you are getting 404.



0
 
cptnem0Author Commented:
Checking apache logs did lead to finding the problem. There was a { somewhere causing an error.
0

Featured Post

Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now