MJC SEO & Web Development Blog > Gallery 3 SEO – Part One – The Perfect URL Scheme

Gallery 3 SEO – Part One – The Perfect URL Scheme

Creating an SEO Friendly Gallery 3 URL scheme with mod_rewrite

Released earlier this month, Gallery 3 is a big improvement in terms of a site to host photos over Gallery 2 in many ways, and features a much better URL scheme than Gallery 2 even without mod_rewrite thanks to it’s from-the-ground-up framework rewrite. But there are a few areas the URL scheme can be improved further and this article deals with these.

If you are reading this article and your server does not support mod_rewrite (most likely if your server is Microsoft IIS or with certain budget shared hosts), you may be out of luck using this code. IIS users can purchase this module isapi_rewrite.

Removing index.php

In gallery3, what used to be querystring parameters (eg album, item) are in a directory format, simplifying the work needed to create a search engine friendly, logical URL scheme.

In the .htaccess file for the gallery install, there’s a commented block with rewrites set up to remove the index.php:

#Remove index.php#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?kohana_uri=$1 [QSA,PT,L]
RewriteRule ^$ index.php?kohana_uri=$1 [QSA,PT,L]
RewriteRule ^index.php/(.*) $1 [QSA,R,L]

How this works is fairly complicated, but it does work and uncommenting the block these lines are contained in fixes the index.php issue simply. If you are doing this on a gallery which is already launched, change R to R=301 in the last line to update search engines to your new URLs.

Fixing Pagination URLs

The only area where URLs are still generated in querystring format in Gallery3 is pagination: /gallery/albumname?page=2

What is needed are rewrite rules that will force URLs to be in the format /gallery/albumname/page/2 The first step is to write a rule that will internally rewrite requests for the (to be created) new format URLs to the old format so the server is able to understand them. Internal rewrites are not visible to the client/browser and do not use the [R] tag at the end of the rule.

#Internal Rewrite#
RewriteRule ^(.*)page/([^/\.]+)/?$ $1?page=$2 [L]

This rule essentially says – if a url is in the format page/somethingnotaforwardslash (with optional trailing slash) redirect it to the old URL format (using two backreferences created in the pattern with round brackets)

To test this rule is working, go to a ?page=2 URL and manually change the URL in the address bar to /page/2 – you should now be able to access the page in this format. However, the page is still accessible at the old URL and clicking any pagination link will return you to using the old URL format.

The first step to fix this is to create an external redirect which precedes the internal redirect in the code. This is a little bit more complicated:

RewriteCond %{THE_REQUEST} \?page=([0-9]+).*
RewriteRule (.*) $1/page/%1? [R=301,L]
RewriteRule (.*)/page/1 $1 [R=301,L]

Line by line – the rewrite condition ensures that the rules only apply to old format pagination URLs (and is needed to create a backreference for the page number to use in the redirect patterns)

The first rewrite rule redirects everything to new format URLs and strips the old querystring (the ? on the end of the redirect pattern).

The second rewrite rule redirects requests for /album/page/1 to /album – these are the same page and this rule prevents duplication of content.

Fixing Gallery’s Pagination URL Generation

However, even after this, every request for a pagination URL results in a 301 redirect – Gallery is still creating pagination links in the old format. This is not very optimal, and a trip into the theme directory is needed to fix it.

Load your paginator.html.php file from the themes/yourtheme/views folder. Add the following code after the opening comments:

### FRIENDLY URLS FOR PAGINATION ###
# Version C
# http://www.milesjcarter.co.uk/blog/photos-on-the-web/gallery-3-seo-part-perfect-url-scheme/
#CONVERT TO FRIENDLY FORMAT#
$pattern = '/\?page=([0-9]+)/';
$replacement = '/page/$1/';
#REMOVE REDUNDANT /PAGE/1"
$pattern2 = '/\/page\/1\b/';
$replacement2 = '';
#PREVIOUS PAGE#
if (isset($previous_page_url)){
$previous_page_url = preg_replace($pattern, $replacement, $previous_page_url);
$previous_page_url = preg_replace($pattern2, $replacement2, $previous_page_url);
}
#NEXT PAGE#
if (isset($next_page_url)) {
$next_page_url = preg_replace($pattern, $replacement, $next_page_url);
}
#FIRST PAGE#
if (isset($first_page_url)) {
$first_page_url = preg_replace($pattern, $replacement, $first_page_url);
$first_page_url = preg_replace($pattern2, $replacement2, $first_page_url);
}
#LAST PAGE#
if (isset($last_page_url)){
$last_page_url = preg_replace($pattern, $replacement, $last_page_url);
}

This code could probably be written in fewer lines, I am not a PHP expert by any means. It does the same thing the external rewrite does, but with each of the pagination URL variables available to the theme, just before they are output to the page. Ater this, your Gallery site should be generating pagination URLs in the SEO friendly format.

There are a number of other rewrite rules you will want to have set up to force consistency, as with any website – though that’s outside the scope of this article.

A Note on Ordering

The order of rules can be important with mod_rewrite – as a rule, from most specific to least specific. In the case of this code for Gallery 3, the “remove index.php” lines should come last in the rewrite block – URL manipulation needs to be complete before these rules are called. Don’t forget that these lines should stay at the top of your rewrite block:

 

RewriteEngine On
RewriteBase /gallery

Thanks to Rocker88 for the tip-off on using isset conditions (see comments) to improve the theme’s generation of URLs – these additions are included in the above code.

Bugfix 05/01/2011: Issue with faulty redirection on page numbers starting in 1 fixed. Thanks to tobe for the tip off on this issue and contributing towards the fix.

Update 04/05/2012: Edited PHP Script to work with Gallery 3.02+ – Thanks to Adam Dimech. 3.03 appears to work with both this version and the previous version of code (see comments for details)

Part two of this series on Gallery 3 SEO deals with improving URL slugs for actual photos with a batch script.

44 Comments

  1. Posted November 30, 2010 at 11:14 am | Permalink

    GOOD

  2. Posted November 30, 2010 at 7:30 pm | Permalink

    I get a “dang” error when I attempt to fix the pagination URLS. Here is my rewrite block (the first part being the default with G3 of course):

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?kohana_uri=$1 [QSA,PT,L]
    RewriteRule ^$ index.php?kohana_uri=$1 [QSA,PT,L]
    RewriteRule ^index.php/(.*) $1 [QSA,R=301,L]

    #Internal Rewrite#
    RewriteRule ^(.*)page/([^/\.]+)/?$ $1?page=$2 [L]

    When I try to replace the ?page=2 with /page/2 I get this:

    Kohana_404_Exception [ Page Not Found ]: The page you requested, timewithshelley/page/2, could not be found.

    I can access the second page just fine with the ?page=2 url. What am I doing wrong?
    Thanks,
    Dan

  3. Miles Carter
    Posted November 30, 2010 at 7:52 pm | Permalink

    Hi Dan, thanks for giving this a go!

    In my rewrite block the lines to remove index.php are last – swap the ordering and I think it should fix it.

    I think this needs to come last in order for the server to be able to understand the pagination querystring, due to this internal rewrite:

    RewriteRule ^(.*)$ index.php?kohana_uri=$1 [QSA,PT,L]

    – which basically says “append the entire URL including querystring to index.php?kohana_uri=”

    Ordering can be very important with mod_rewrite, I will add a note to the article that touches on this.

    Let me know how you get on

  4. Posted November 30, 2010 at 8:07 pm | Permalink

    Yep, that got it, thanks!!

  5. rocker88
    Posted December 4, 2010 at 5:29 pm | Permalink

    I have a small extension to paginator code. checks for variable existence and prevents from Last, First Page, … if you are on this pages.

    ### FRIENDLY URLS FOR PAGINATION ###
    # http://www.milesjcarter.co.uk/blog/photos-on-the-web/gallery-3-seo-part-perfect-url-scheme/
    #CONVERT TO FRIENDLY FORMAT#
    $pattern = ‘/\?page=([0-9]+)/’;
    $replacement = ‘/page/$1′;
    #REMOVE REDUNDANT /PAGE/1″
    $pattern2 = ‘/\/page\/1/’;
    $replacement2 = ”;
    #PREVIOUS PAGE#
    if (isset($previous_page_url)){
    $previous_page_url = preg_replace($pattern, $replacement, $previous_page_url);
    $previous_page_url = preg_replace($pattern2, $replacement2, $previous_page_url);
    }
    #NEXT PAGE#
    if (isset($next_page_url)) {
    $next_page_url = preg_replace($pattern, $replacement, $next_page_url);
    }
    #FIRST PAGE#
    if (isset($first_page_url)) {
    $first_page_url = preg_replace($pattern, $replacement, $first_page_url);
    $first_page_url = preg_replace($pattern2, $replacement2, $first_page_url);
    }
    #LAST PAGE#
    if (isset($last_page_url)){
    $last_page_url = preg_replace($pattern, $replacement, $last_page_url);
    }

  6. Miles Carter
    Posted December 4, 2010 at 10:08 pm | Permalink

    Nice work rocker88, I didn’t notice that these links didn’t appear beforehand, I think because I wrote this code straight after I imported my G2 gallery.

    I will update the post to include the isset conditions!

  7. Posted December 6, 2010 at 2:55 am | Permalink

    Thanks for this howto, it greatly improved my gallery!,
    I still have issues with the pagination, I will give a try on the next days

    Saludos

    Martintoy

  8. Miles Carter
    Posted December 9, 2010 at 11:38 pm | Permalink

    Hi Martintoy, glad it’s helped! Have you had any luck with the pagination?

  9. Posted December 11, 2010 at 8:00 pm | Permalink

    Thanks for these excellent SEO posts!

    I did have trouble with .htaccess and order.
    I had to place the pagination entries first in the order:

    #External Rewrite – fixes pagination – http://www.milesjcarter.co.uk/blog/photos-on-the-web/gallery-3-seo-part-perfect-url-scheme/#
    RewriteCond %{THE_REQUEST} \?page=([0-9]+).*
    RewriteRule (.*) $1/page/%1? [R=301,L]
    RewriteRule (.*)/page/1 $1 [R=301,L]

    #Internal Rewrite – fixes pagination#
    RewriteRule ^(.*)page/([^/\.]+)/?$ $1?page=$2 [L]

    #G3 defaults#
    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /gallery
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?kohana_uri=$1 [QSA,PT,L]
    RewriteRule ^$ index.php?kohana_uri=$1 [QSA,PT,L]
    RewriteRule ^index.php/(.*) $1 [QSA,R,L]

  10. Miles Carter
    Posted December 12, 2010 at 4:30 pm | Permalink

    Hi Grafis, if you move this block to the top of the code you quoted (and above any other mod_rewrite code), it should hopefully work! Let me know how you get on.

    #G3 defaults#
    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /gallery

  11. Posted December 19, 2010 at 10:22 am | Permalink

    Thank you so much :) helped ^^

  12. Posted December 25, 2010 at 4:58 pm | Permalink

    I’m trying to get the code working for an Album with more than nine pages (300+ images). The LAST link shows page 12 but when click returns the visitor to the Albums main page as does any page past 9.

    I’ve tried modifying .htaccess and Paginator pages from 0-9 to 0-15 as below, did not work.

    Paginator:
    $pattern = ‘/\?page=([0-15]+)/’;

    .htaccess
    RewriteCond %{THE_REQUEST} \?page=([0-15]+).*

  13. Posted December 25, 2010 at 5:09 pm | Permalink

    @miles carter
    Pagination code placement in .htaccess – thanks yes above #G3 defaults# works!

  14. tobe
    Posted January 4, 2011 at 11:07 am | Permalink

    I have the same problem grafis described. On large albums with more than 9 pages, I’m always redirected to the first page of the album when clicking ‘Next’ on Page 9.

    What can I do to change this behaviour?

  15. Miles Carter
    Posted January 5, 2011 at 1:22 am | Permalink

    Hi tobe, I’ve just tested it with some test patterns and you’re right as the pattern to remove the redundant page/1 matches any page number starting in 1 – time for a bugfix!

    I’ve tested this as working – change the line:

    RewriteRule (.*)/page/1 $1 [R=301,L]

    to

    RewriteRule (.*)/page/1$ $1 [R=301,L]

    I will update the code in the main post to reflect this. Thanks for your help in spotting this issue!

  16. tobe
    Posted January 5, 2011 at 11:50 am | Permalink

    That worked. Now Page 10+ can be loaded.

    One more thing that needs to be changed is the previous page link. In the paginator.html.php, only remove if it is “page/1″, not if it is “page/10″ etc. I changed the pattern line as follows:

    #REMOVE REDUNDANT /PAGE/1″
    $pattern2 = ‘/\/page\/1\b/’;

  17. Miles Carter
    Posted January 5, 2011 at 6:25 pm | Permalink

    Good work! Thanks for that tobe, I have updated the code in the post. Pretty much the same thing happening again with that line too :s. It looks like these redundant page/1 URLs could be removed in the core, since everything would still work without any mod_rewrite.

  18. Posted January 8, 2011 at 6:07 pm | Permalink

    Thanks Miles and Tobe, working great for 10+ pages!

  19. Posted February 7, 2011 at 2:01 pm | Permalink

    thank you for this post :)

    have you got any suggestion how to make URLs of actual photos to look like:

    http://www.mysite.com/gallery/animals/my-cat.html?

    at the moment it looks like :

    http://www.mysite.com/gallery/animals/my-cat/

    thanks for your time :)

  20. Posted June 5, 2011 at 6:04 am | Permalink

    Hi Miles

    I’ve just realize that I have a problem generating the second page of the main gallery, the url in next butoon is formed as: http://page/2 instead of http://ecuadorpictures.paisverde.com/page/2

    website: http://ecuadorpictures.paisverde.com/

    .htaccess file:

    Options +FollowSymLinks
    # Options +SymLinksIfOwnerMatch
    RewriteEngine On
    RewriteBase /

    RewriteCond %{THE_REQUEST} \?page=([0-9]+).*
    RewriteRule (.*) $1/page/%1? [R=301,L]
    RewriteRule (.*)/page/1 $1 [R=301,L]

    #Internal Rewrite – fixes pagination#
    RewriteRule ^(.*)page/([^/\.]+)/?$ $1?page=$2 [L]

    #G3 defaults#
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?kohana_uri=$1 [QSA,PT,L]
    RewriteRule ^$ index.php?kohana_uri=$1 [QSA,PT,L]
    RewriteRule ^index.php/(.*) $1 [QSA,R,L]

    paginator.html.php file:

    <a href="” class=”g-button ui-icon-left ui-state-default ui-corner-all”>


    <a href="” class=”g-button ui-icon-left ui-state-default ui-corner-all”>


    $first_visible_position,
    “to_number” => $last_visible_position,
    “count” => $total)) ?>

    $position, “total” => $total)) ?>

    <a href="” class=”g-button ui-icon-right ui-state-default ui-corner-all”>


    <a href="” class=”g-button ui-icon-right ui-state-default ui-corner-all”>


    Thanks for your help

  21. Posted June 11, 2011 at 4:04 pm | Permalink

    Something’s changed in Gallery 3.0.2 and this hack was suddenly broken. It took me hours to figure out why my second album pages were giving me a “Dang” and I narrowed it down to these lines in your code:

    #CONVERT TO FRIENDLY FORMAT#
    $pattern = ‘/\?page=([0-9]+)/’;
    $replacement = ‘/page/$1′;

    In order to work in Gallery 3.0.2, I had to change them to:

    #CONVERT TO FRIENDLY FORMAT#
    $pattern = ‘/\?page=([0-9]+)/’;
    $replacement = ‘page/$1/’;

    When you upgrade your Gallery installation to 3.0.2 (which at the moment is an extremely tedious process), check that my new code works if you have problems. If you find the same, you may like to update the page.

    Thanks so much for your work. The friendly URLs are much appreciated :)

  22. Miles Carter
    Posted July 11, 2011 at 10:53 am | Permalink

    @Adam D, great work, I’ve got to admit to being off the ball recently, I didn’t even know there was a new Gallery release until I read your comment. I’m in New Zealand and don’t have a reliable Internet connection, I’d been taking a total break from screens and Internet stuff for a few months. Somehow over 2000 comments had built up on this blog to be approved (of which only 3 were genuine) – I really need to get akismet set up on here. So apologies for not approving your comment sooner (and anyone else reading this).

    I will update my Gallery ASAP and if the code works, I’ll update the post.

    Again, many thanks for contributing towards this!

    @Gabriel, @Edi, I will reply in the next couple of days

  23. Ashish
    Posted November 28, 2011 at 10:57 am | Permalink

    I added the first part only
    =====
    #Remove index.php#
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?kohana_uri=$1 [QSA,PT,L]
    RewriteRule ^$ index.php?kohana_uri=$1 [QSA,PT,L]
    RewriteRule ^index.php/(.*) $1 [QSA,R,L]
    ======

    its working fine but my Page module is givving error

    page module is used to create about us and other pages…. it is throwing Dang error
    please advice

  24. Posted March 30, 2012 at 5:03 pm | Permalink

    Thanks for this rewrite information Miles. Everything works well on Gallery 3.0.2

  25. Posted April 25, 2012 at 9:13 am | Permalink

    Thanks for these brilliant tutorials Miles. I’m just getting started with Gallery and they’ve really helped me with the SEO side of things.

    I’ve just implemented all the mods in this tut on a 3.0.3 install and everything appears to be working as expected.

    Related to your article, the only other thing I want to change wrt URL structure is to fix canonical issue (www vs non www). I want to have everything go to www.

    I tried using this code along side yours but it’s breaking my site
    Rewritecond %{http_host} ^mysite.com [nc]
    Rewriterule ^(.*)$ http://www.mysite.com/$1 [r=301,nc]

    Any thoughts on how to do this?

    Neil

  26. Miles Carter
    Posted May 4, 2012 at 12:00 am | Permalink

    Hi Neal, this is the rule I use on this site:

    RewriteCond %{HTTP_HOST} ^milesjcarter\.co\.uk [NC]
    RewriteRule (.*) http://www.milesjcarter.co.uk/photos/$1 [R=301,L]

    There are a few differences from your code that may not matter, e.g. ‘.’ not escaped with backslash in the regex expression for the rewrite condition, lack of an “L” tag on the Rewrite Rule (which means don’t process other rules with this one in a compound operation) and the redundant start/end of line marks.

    The most likely problem is that your gallery is in a subdirectory, which needs to be added to the end of the rewrite rule.

    If this is not the case, it could be incorrect ordering of rules, the force canonical rule should come after other basic level URL manipulating rules (eg remove trailing comma or period from requests) but before the Gallery specific code that’s in this blog post.

    Hope this helps! Let me know if you are still stuck.

    @edi, I wouldn’t recommend doing this but see this thread for more info http://www.webmasterworld.com/apache/3593230.htm

  27. Posted May 7, 2012 at 4:32 am | Permalink

    Fist thank you very much for such nice articles on Gallery SEO.

    I have problem with your code, hope anyone will help me out. I am using the Gallery ver. 3.0.3, and when i followed these instructions (with so many try) but seems this code is not working.

    I will be really great if any one can provide me the working code for Gallery 3.0.3 version.

    [this is my site – http://hotcineactress.com for which i am trying to implement this SEO.

    Thank you in advance

    Regards, Mona

  28. Miles Carter
    Posted May 9, 2012 at 6:51 am | Permalink

    @Mona Mona,

    Nice site!

    It’s difficult to pinpoint why the code wouldn’t be working without more details.

    I just tested the code with 3.03 and everything seems to work fine. At what point are you getting problems? Is there an error message?

  29. Posted June 7, 2012 at 1:29 am | Permalink

    I don’t know why I can’t doing this on my websites from long time ago.

    Can you please give me attachment of your .htaccess file and paginator.html.php file, I will look at there to edit on my files?

    (Sorry for my bad English).

    Thanks.

  30. Posted January 5, 2013 at 4:25 pm | Permalink

    This is really a great Tutorial. Everthing works perfect, but i have a problem with the pages module (http://codex.gallery2.org/Gallery3:Modules:Pages) User can access the created pages, but the admin link …/index.php/admin/pages/editpage/4 is formed to …/admin/pages/editpage/3. The index.php is removed, for this reason it is not possible to edit the pages with the SEO Mod turned on. If i delete this rule: RewriteRule ^(.*)page/([^/\.]+)/?$ $1?page=$2 [L] it is again possiible to access the page.

    Do you a idea how to create an exception or work around this problem?

  31. Posted January 7, 2013 at 6:59 am | Permalink

    I have a correction to my last comment:

    The correct URL for the administration of the “pages” is …admin/pages/edit?page=3 and its formed to …/admin/pages/editpage/3

    I think the problem is that the SEO Mod changes everything after “page” in the URL.

  32. Miles Carter
    Posted January 7, 2013 at 8:36 am | Permalink

    Hi Thomas, it should be possible to modify this rule or add a condition and another rule so that it will still work in this (and other similar cases).

    I will have a look into this when I have some free time. Thanks for bringing this to my attention and for your correction, that’s useful info to have.

  33. Posted January 7, 2013 at 5:31 pm | Permalink

    Miles, thanks for your answer. I have really tried to figure out the problem myself, but was not able to get it to work. If you need any further information just let me know.

  34. Srikanth
    Posted February 1, 2013 at 10:06 am | Permalink

    I had a search box where it contains city names in its dropdown
    when user selects the place from drop down it should shown the related posts it gng well and gud but i want my url to be displayed as
    http://sitename.in/banglore-apartments

    instead of showing
    http://sitename.in/category.php?term=Bangalore&filter=ALL
    can anyone please help me

  35. Posted February 1, 2013 at 7:50 pm | Permalink

    thanks for the article. Very useful. Have you tried this on gallery3 3.0.4 with the wind theme? If I add the php to the paginator page, the links on the page for first, next previous and last disappear. Thanks.

  36. Posted February 13, 2013 at 6:22 am | Permalink

    In this thread a workaround is available which is working for me:
    http://galleryproject.org/node/110874

  37. Miles Carter
    Posted February 13, 2013 at 9:29 am | Permalink

    @Thomas – Thanks for making me aware of that thread, I still haven’t had chance to do anything myself, but it’s fairly high up on my list now.

    @grantiago – The theme for my gallery site is based on wind. I’m still running 3.03 though, when I upgrade I will look into it.

  38. Posted February 16, 2013 at 7:37 am | Permalink

    I am using a nightly build of 3.0.4: SEO Mod still works great

  39. Posted February 28, 2013 at 4:08 am | Permalink

    Hey there just wanted to give you a quick heads
    up and let you know a few of the pictures aren’t loading properly. I’m not sure why but I think its a linking issue.
    I’ve tried it in two different browsers and both show the same outcome.

  40. Miles Carter
    Posted March 5, 2013 at 3:07 am | Permalink

    Hi kredyt, do you mean on your site or my site?

  41. Posted August 1, 2013 at 8:02 pm | Permalink

    nice Everything works well on my Indian photo Gallery

  42. Posted February 26, 2014 at 4:32 pm | Permalink

    how do i remove the # at the end of my site ….. what have i done wrong

  43. Posted February 27, 2014 at 6:25 pm | Permalink

    got a # behind my url how can i remove this one ……

  44. Miles Carter
    Posted July 14, 2014 at 12:12 am | Permalink

    I wouldn’t worry about # from an SEO standpoint as it’s not interpreted by search engines

3 Trackbacks

  1. [...] This is part two of a series on Gallery 3 SEO. Read Part one at Gallery 3 SEO – Part One – The Perfect URL Scheme [...]

  2. [...] part of our procedure was developed by Miles J. Carter and is explained in detail on his blog. I have made slight modifications to his [...]

  3. By Gallery 3 Setup Guide | vincentkong.com on March 13, 2014 at 8:02 pm

    […] Note: More URL rewrite information can be found at http://www.milesjcarter.co.uk/blog/photos-on-the-web/gallery-3-seo-part-perfect-url-scheme/ […]

Post a Comment

Your email is never shared. Required fields are marked *

*
*