Author Topic: Cannot access empty property instead of proper 404 error  (Read 4646 times)

RomanWeb

  • Beginner
  • *
  • Posts: 17
Cannot access empty property instead of proper 404 error
« on: December 10, 2012, 20:32:28 pm »
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

  • Beginner
  • *
  • Posts: 17
Re: Cannot access empty property instead of proper 404 error
« Reply #1 on: December 17, 2012, 05:48:27 am »
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:
Code: [Select]
$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

  • Nikos
  • Global Moderator
  • Full Member
  • *
  • Posts: 2369
Re: Cannot access empty property instead of proper 404 error
« Reply #2 on: December 17, 2012, 10:41:08 am »
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

  • Beginner
  • *
  • Posts: 17
Re: Cannot access empty property instead of proper 404 error
« Reply #3 on: December 20, 2012, 04:49:22 am »
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

Code: [Select]
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

  • UK Web Developer & Consultant
  • Global Moderator
  • Super Hero
  • *
  • Posts: 28525
  • Always on vacation
    • Jenkin Hill Internet
Re: Cannot access empty property instead of proper 404 error
« Reply #4 on: December 20, 2012, 09:44:05 am »
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

Jenkin Hill Internet,
Lowestoft, Suffolk, UK

Unsolicited PMs/emails will be ignored.

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

Currently using VirtueMart 4.0.12 10777  J 3.10.11 PHP 8.0.27

RomanWeb

  • Beginner
  • *
  • Posts: 17
Re: Cannot access empty property instead of proper 404 error
« Reply #5 on: December 20, 2012, 16:24:06 pm »
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.