News:

Support the VirtueMart project and become a member

Main Menu

Cannot access empty property instead of proper 404 error

Started by RomanWeb, December 10, 2012, 20:32:28 PM

Previous topic - Next topic

RomanWeb

Hello Virtuemart experts!

I got an php error instead of 404 page.
When I enter some non existing address, it is supposed to give 404 error.
Instead it readdresses to: /index.php?option=com_virtuemart

And shows error about empty property, similar to the subject of this post

Fatal error: Cannot access empty property in /home/a5396578/public_html/libraries/joomla/registry/registry.php on line 336

I tried installing Qlue Custom 404 plugin..
I also tried to create page and assign it in the .htaccess like:
ErrorDocument 404 /index.php?option=com_content&view=article&id=7

Though it worked to get the custom page of the plugin (even though the .htaccess is configured to my single article),
for specific case when only the option has error. Any other missing file etc. would show that php error.
So, address like artisansjewelry.ca/index.php?option=com_virtuemartgg
Would display the page configured via Qlue Custom 404 plugin.

Joomla 2.5.6
VM 2.0.10
Domain: http://artisansjewelry.ca
Sorry for duplication, I triedto hijack older similar thread, but nobody answered there..

RomanWeb

I was able to change the behaviour a bit by following the instructions in
http://forum.joomla.org/viewtopic.php?f=579&t=709422#p2933375

Then the fix was not working for backend and I found that this code is fixing it for Joomla 2.5 VM2.0:
$app =& JFactory::getApplication();
if ( $app->getClientId() === 0 )
{
for ($i = 0, $n = count($nodes) - 1; $i < $n; $i++)
{   if(strlen($nodes[$i]>0)) {
if (!isset($node->$nodes[$i]) && ($i != $n))
{
   $node->$nodes[$i] = new stdClass;
}
$node = $node->$nodes[$i];
}
}

}
else {for ($i = 0, $n = count($nodes) - 1; $i < $n; $i++)
{
if (!isset($node->$nodes[$i]) && ($i != $n))
{
   $node->$nodes[$i] = new stdClass;
}
$node = $node->$nodes[$i];
}
}


So, right now, it's better but still not perfect.
First of all, instead of 404 error I get my main mage (Front page of store) displayed with
http://myhost.com/index.php?option=com_virtuemart in the address bar and 200 code rather than 404

I would prefer getting 404 error on a custom page...

Any ideas how to fix it?

bytelord

Hello,

PHP version? Did you try to upgrade to 2.0.14? I think that issue is related to sef. Do you use any third part sef component?

Please try it with sef disabled on both joomla and vm2 and also do not use .htaccess (disable mod rerwiting).

Regards
Production: Joomla 2.5.8 | VM 2.0.14 | PHP 5.3.13
Testing     : Joomla 2.5.8 | VM 2.0.16 | PHP 5.3.8
Testing     : Joomla 2.5.8 |    VM 2.1   | PHP 5.3.8

- Don't Forget to mark thread as solved when it is solved!
- Please do not PM with support questions, use the forum!

RomanWeb

PHP version 5.2.*
I copied web site and now can test all kind of things.

So, disabling SEF made one change.
Now, instead of forwarding to /index.php?option=com_virtuemart with code 200,
It loads the same (main page, store) under the url entered, again with code 200.

I disabled URL rewrite and SEO Friendly URLs  under global configuration of Joomla and disabled SEO in Virtuemart config.
Then after removing all the extras from .htaccess it works..

So, I wonder how I can fix it so that it does not override the 404 error.
Removing the "Rewrite rules to block out some common exploits." did not help.
But removing the SEF portion does start to follow earlier instructions, i.e. goes to /error.php and gives proper error 404.

Here's my .htaccess

RewriteBase /

ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php


## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks

## Mod_rewrite in use.
RewriteEngine On

#RewriteCond %{REQUEST_FILENAME} -f
#RewriteCond %{REQUEST_URI} ^images/stories/virtuemart/product/(.*)\.(jpeg|jpg)$ [NC]
#RewriteRule ^images/stories/virtuemart/product/(.*)\.(jpeg|jpg)$ /watermark/watermark.php [QSA,NC]


## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Return 403 Forbidden header and show the content of the root homepage
RewriteRule .* index.php [F]
#
## End - Rewrite rules to block out some common exploits.

## Begin - Custom redirects
#
# If you need to redirect some pages, or set a canonical non-www to
# www redirect (or vice versa), place that code here. Ensure those
# redirects use the correct RewriteRule syntax and the [R=301,L] flags.
#
## End - Custom redirects

## Begin - Joomla! core SEF Section.
#
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the request is for something within the component folder,
# or for the site root, or for an extensionless URL, or the
# requested URL ends with one of the listed extensions
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule .* index.php [L]
#
## End - Joomla! core SEF Section.


jenkinhill

PHP 5.2.what? Joomla 2.5.6 should not be used on versions earlier than 5.2.4 and preferably 5.3+

On a properly secured server you cannot use  Options +FollowSymLinks   in .htaccess, it should be   Options +SymLinksIfOwnerMatch
Kelvyn
Lowestoft, Suffolk, UK

Retired from forum life November 2023

Please mention your VirtueMart, Joomla and PHP versions when asking a question in this forum

RomanWeb

PHP is 5.2.17 - here's full info: http://simplyjems.comli.com/info/

I changed Options and commented it out without any effect.
And will use your version for future.