Jump to content
Chemo

[Contribution] Ultimate SEO URLs - by Chemo

Recommended Posts

Okay i solved my problem. The cause was the Master Products contrib. Some sql queries in the index.php and advanced_search_results.php didnt requested the prducts_master and products_master_status from aboive mentioned contrib. The product_info.php had a routine which to set all get params, which set the buy_now action. This routine asked for the master and master_status. Because the queries on the other page didnt requested this db columns, this routine failed and didnt provide the products_id to the tep_href_link, which then itself failed and returned an "old-style" link without a products id. I added the columns to the queries and everything works fine now.

 

Now onto my other "problem", how do i modify the tep_href_link, that it always (if not empty) shows the manufacturer in the link like this

/manufacturer-product-p-10.html for every product?

Thx in advance,

regards Benjamin

Share this post


Link to post
Share on other sites

So i got it working, i hope i used the right approach. Here is my code:

I only altered html_output.php:

Line 96, from:

$rewrite_page_product = short_name(constant('PRODUCT_NAME_'.$p2[1])) . '-p-' . $p2[1] . '.html';

to:

// Addition to write the manufacturers name into the static link too
$manufac_query = tep_db_query("SELECT " . TABLE_MANUFACTURERS . ".manufacturers_name FROM " . TABLE_MANUFACTURERS . " INNER JOIN " . TABLE_PRODUCTS . " ON " . TABLE_MANUFACTURERS . ".manufacturers_id = " . TABLE_PRODUCTS . ".manufacturers_id WHERE " . TABLE_PRODUCTS . ".products_id = " . $p2[1]);
$manufac_name = "";              
while ($manufac = tep_db_fetch_array($manufac_query)) {
 $manufac_name = $manufac['manufacturers_name'];
}
if ($manufac_name != '') {
 $rewrite_page_product = short_name($manufac_name) . "-" . short_name(constant('PRODUCT_NAME_'.$p2[1])) . '-p-' . $p2[1] . '.html';
} else {
 $rewrite_page_product = short_name(constant('PRODUCT_NAME_'.$p2[1])) . '-p-' . $p2[1] . '.html';
}

 

I also did some changes to the short_name function, to replace some umlauts, but this is just for the german speaking people. I just added these lines directly after the function declaration:

  $str = str_replace("?", "ae", $str);
 $str = str_replace("?", "oe", $str);
 $str = str_replace("?", "ue", $str);
 $str = str_replace(" ", "-", $str);

Im just writing this because i think i read someones post asking about this.

Share this post


Link to post
Share on other sites
Only thing I can see wrong here is you are missing 1 line -

 

Options +FollowSymLinks
RewriteEngine On
# Change "folder" to your catalog directory name
RewriteBase /catalog/
RewriteRule ^(.*)-p-(.*).html$ product_info.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-c-(.*).html$ index.php?cPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-m-(.*).html$ index.php?manufacturers_id=$2&%{QUERY_STRING}

Add Options +FollowSymLinks

 

 

Thanks NHRA, but that was not in the install instructions? Is that in an upgrade version or something? I downloaded v1.4, but I seem to recall that I was supposed to install this version and then upgrade... do I remember right?

 

Also, what was that other line for? Thanks

Share this post


Link to post
Share on other sites

Also, I just added what you said and I got a 500 error - Internal Server Error. I had to change the code back to get my site to work again?

Share this post


Link to post
Share on other sites
It isn't the {QUERY_STRING} but probably some other setup consideration.  I have seen servers where you need to add:

Options +FollowSymLinks

above the RewriteEngine On directive whereas others don't.  Also, the htaccess file should a blank line (line feed) at the end of the file.

 

Do you happen to have different folders for SSL / NONSSL?

You shouldn't need to manually clear the cache as it auto-expires or is replaced with current data when you make a change to a product or category.  There are only a few situations where it would need to be manually reset...and in that case you can just set that switch to true and update the setting.

 

Bobby

 

From the Apache support site:

FollowSymLinks and SymLinksIfOwnerMatch

 

Wherever in your URL-space you do not have an Options FollowSymLinks, or you do have an Options SymLinksIfOwnerMatch Apache will have to issue extra system calls to check up on symlinks. One extra call per filename component. For example, if you had:

 

DocumentRoot /www/htdocs

<Directory />

    Options SymLinksIfOwnerMatch

</Directory>

 

and a request is made for the URI /index.html. Then Apache will perform lstat(2) on /www, /www/htdocs, and /www/htdocs/index.html. The results of these lstats are never cached, so they will occur on every single request. If you really desire the symlinks security checking you can do something like this:

 

DocumentRoot /www/htdocs

<Directory />

    Options FollowSymLinks

</Directory>

<Directory /www/htdocs>

    Options -FollowSymLinks +SymLinksIfOwnerMatch

</Directory>

 

This at least avoids the extra checks for the DocumentRoot path. Note that you'll need to add similar sections if you have any Alias or RewriteRule paths outside of your document root. For highest performance, and no symlink protection, set FollowSymLinks everywhere, and never set SymLinksIfOwnerMatch.

Share this post


Link to post
Share on other sites
Thanks NHRA, but that was not in the install instructions?  Is that in an upgrade version or something?  I downloaded v1.4, but I seem to recall that I was supposed to install this version and then upgrade... do I remember right?

 

Also, what was that other line for? Thanks

If you are starting fresh with no older SEO URLs installed, you should start with v2.0, don't bother with v1.4.

Share this post


Link to post
Share on other sites

I just posted last night,

 

Any ideas why I get 500 Interal Errors?

 

 

Options +FollowSymLinks

RewriteEngine On

# Change "folder" to your catalog directory na

RewriteBase /catalog/

RewriteRule ^(.*)-p-(.*).html$

product_info.php?products_id=$2&%{QUERY_STRING

RewriteRule ^(.*)-c-(.*).html$ index.php?cPath

RewriteRule ^(.*)-m-(.*).html$

index.php?manufacturers_id=$2&%{QUERY_STRING}

Share this post


Link to post
Share on other sites
Server setup?

 

 

 

Server OS: Linux 2.4.29-grsec+w+fhs6b+gr0501+nfs+a32+++p4+sata+c4+gr2b-v6.189 Database: MySQL 4.0.24-log

Server Date: 05/11/2005 10:54:07 Datebase Date: 05/11/2005 10:54:07

 

HTTP Server: Apache/1.3.31 (Unix) DAV/1.0.3 mod_gzip/1.3.26.1a PHP/4.3.10 mod_ssl/2.8.19 OpenSSL/0.9.6c

PHP Version: 4.3.10 (Zend: 1.3.0)

 

 

Is that enough information? I can get you what ever you need.

Share this post


Link to post
Share on other sites
Server OS: Linux 2.4.29-grsec+w+fhs6b+gr0501+nfs+a32+++p4+sata+c4+gr2b-v6.189      Database: MySQL 4.0.24-log

Server Date: 05/11/2005 10:54:07      Datebase Date: 05/11/2005 10:54:07

 

HTTP Server: Apache/1.3.31 (Unix) DAV/1.0.3 mod_gzip/1.3.26.1a PHP/4.3.10 mod_ssl/2.8.19 OpenSSL/0.9.6c

PHP Version: 4.3.10 (Zend: 1.3.0)

Is that enough information? I can get you what ever you need.

 

Also my site does use SSL for certain parts, like the check out.

Share this post


Link to post
Share on other sites

Send me a copy of your Apache httpd.conf and php.ini file. Do not post it. Send it via email. The files will be rather large so don't clutter the thread.

 

Bobby

Share this post


Link to post
Share on other sites
I just posted last night,

 

Any ideas why I get 500 Interal Errors?

Options +FollowSymLinks

RewriteEngine On

# Change "folder" to your catalog directory na

RewriteBase /catalog/

RewriteRule ^(.*)-p-(.*).html$

product_info.php?products_id=$2&%{QUERY_STRING

RewriteRule ^(.*)-c-(.*).html$ index.php?cPath

RewriteRule ^(.*)-m-(.*).html$

index.php?manufacturers_id=$2&%{QUERY_STRING}

It that EXACTLY what you have in your htaccess file?? If it is, then you need to fix it. It should look like this:

Options +FollowSymLinks
RewriteEngine On
# Change "folder" to your catalog directory name
RewriteBase /catalog/
RewriteRule ^(.*)-p-(.*).html$ product_info.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-c-(.*).html$ index.php?cPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-m-(.*).html$ index.php?manufacturers_id=$2&%{QUERY_STRING}

Share this post


Link to post
Share on other sites
It that EXACTLY what you have in your htaccess file?? If it is, then you need to fix it. It should look like this:

Options +FollowSymLinks
RewriteEngine On
# Change "folder" to your catalog directory name
RewriteBase /catalog/
RewriteRule ^(.*)-p-(.*).html$ product_info.php?products_id=$2&%{QUERY_STRING}
RewriteRule ^(.*)-c-(.*).html$ index.php?cPath=$2&%{QUERY_STRING}
RewriteRule ^(.*)-m-(.*).html$ index.php?manufacturers_id=$2&%{QUERY_STRING}

 

 

This is what is in my file.

 

Options +FollowSymLinks

RewriteEngine On

# Change "folder" to your catalog directory name

RewriteBase /catalog/

RewriteRule ^(.*)-p-(.*).html$ product_info.php?products_id=$2&%{QUERY_STRING}

RewriteRule ^(.*)-c-(.*).html$ index.php?cPath=$2&%{QUERY_STRING}

RewriteRule ^(.*)-m-(.*).html$ index.php?manufacturers_id=$2&%{QUERY_STRING}

Share this post


Link to post
Share on other sites
Send me a copy of your Apache httpd.conf and php.ini file.? Do not post it.? Send it via email.? The files will be rather large so don't clutter the thread.

 

Bobby

 

 

I am not sure if i mentioned this to you, but i am using a host. Dreamhost. I am not sure how to go about and get that info for you.

Edited by pura vida

Share this post


Link to post
Share on other sites
I am not sure if i mentioned this to you, but i am using a host. Dreamhost. I am not sure how to go about and get that info for you.

Call your server administrator and tell him to fix it...the problem is most likely due to restrictive configuration values in the Apache httpd.conf file. There is no way around it. Your server admin will either fix it or the contribution won't work on that server.

 

Bobby

Share this post


Link to post
Share on other sites
If you are starting fresh with no older SEO URLs installed, you should start with v2.0, don't bother with v1.4.

 

 

This is what is written on the contrib page:

 

RELEASE NOTES:

 

If you have less than version 1.4 installed you are encouraged to upgrade FRIST to 1.4 then to version 2.0

 

I guess I just read that to mean that I should install v1.4 and then upgrade to v2.0, but now that I read it again, I guess that was only meant for those who already had it installed with an older version. Oops :P

Share this post


Link to post
Share on other sites
Call your server administrator and tell him to fix it...the problem is most likely due to restrictive configuration values in the Apache httpd.conf file.  There is no way around it.  Your server admin will either fix it or the contribution won't work on that server.

 

Bobby

 

 

I will do so.

 

Have you ever used Mambo. That has a SEO contribution that requires us to change the .htaccess, and that seems to work.

 

Strange.

Share this post


Link to post
Share on other sites

Hi, I had v1.4 and went to upgrade

 

I uploaded all the new files and then went to call /install-seo.php page and got the following error:

 

Fatal error: Call to a member function on a non-object in /catalog/includes/seo_cache.php on line 47

 

Anybody know what happened?

 

Here is the code on line 47 for seo_cache.php

 

$cache->is_cached($cache_file . 'products', $is_cached, $is_expired);

 

Please help

Share this post


Link to post
Share on other sites

You forgot to initialize the class above the call...

 

Bobby

Share this post


Link to post
Share on other sites
Use this sitemap => Sitemap MS2.2 and then overwrite the base class with the one provided by Chris dated 11 Mar 2005.

 

Bobby

 

 

Thank you Chemo. It worked out perfectly.

I installed the sitemap contrib you recommended and then worked my way through your ultimate seo url.

It was much easier than I thought (at least for a noob like me :D )

Great contrib Chemo :thumbsup:

 

Shams

Share this post


Link to post
Share on other sites
Thank you Chemo. It worked out perfectly.

I installed the sitemap contrib you recommended and then worked my way through your ultimate seo url.

It was much easier than I thought (at least for a noob like me :D )

Great contrib Chemo  :thumbsup:

 

Shams

Thank you! Now that you got the hard part of the way please remember that if a small issue comes up that is unseen now search the thread! Most small issues that are server quirks have been covered. I'm working on the next version (v3.X) and need the time to dedicate to development...so I'm actively staying off the thread UNLESS it's an issue that has not already been solved or one that I could provide a different answer for. Know where I'm coming from?

 

Congrats and enjoy!

 

Bobby

Share this post


Link to post
Share on other sites

Chemo,

 

Regarding the .htaccess issue and my host. I have requested the two files today and hopefully they will help. They have already said that they will not help me with the .htaccess code you have supplied. So, for now it looks like I am SOL.

 

But, I have an idea and perhaps.. just perhaps you may be able to see something that I can not.

 

I used a solution for Mambo Content System that performed almost the same thing. They have a SEF URL module as well that requires the change in URLs. They had me change the .htaccess,

 

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*) index.php

 

and this appread to work without getting those errors we talked about. Is this information of any use? Can this help?

Share this post


Link to post
Share on other sites

I (re)installed the contri twice and I still get the 404 errors by selecting Rewrite in my admin while Cname works fine. But I noticed that using Rewrite I get this url:

 

zingendpratend-fotoframe-p-146.html?osCsid=8fb7d772f32cbb1a99b12c369ee3b4cc

 

Why is the osCsid still there? It should be like this:

zingendpratend-fotoframe-p-146.html

 

PLEASE can someone help me or point me to a direction ???

 

:'(

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×