Nginx重写URL-Error

I have a Problem with my Nginx rewrite rule.

I have two Pages :

  • First Page : category.php
  • Second Page: subcategory.php

My Page :

<!doctype html>
<html>
    <head></head>
    <body>
        <ul>
            <?php 
                while($row = $smtp->fetch(PDO::ASSOC)){
                echo "li><a href='category.php? id='".$row['id']."'>'".$row['name']."'</a></li>";
                }

                ?>
        </ul>
        <?php
            while($row = $smtp->fetch(PDO::ASSOC)){
            echo "li><a href='subcategory.php?id='".$row['id']."'>'".$row['name']."'</a></li>";
            }
            ?>
    </body>
</html>

My Problem is if I push a Link with category.php?id=3. I will get the same page with other values but the Links of subcategory.php looks different no subcategory.php?id=1

The looking like category/subcategory/2

The FireBug show right url: subcategory.php?id=1.

Why?

My rewrite rule :

rewrite '^/category.php/(.*)$' /subcategory.php?id=$1 last;

I need a Link like subcategory/1 and not category/subcategory/1

There's a few little issues here.

To answer your question, the first part is with the URLs in the href. You are using relative URLs and relative URLS get added to what the browser thinks is the current URL directory.

If you are at http://yourdomain.com/category/[something] then href="subcategory.php?id..." will send you to http://yourdomain.com/category/subcategory.php?id... - as the current ULR directory is http://yourdomain.com/category/

Even if the link is virtual (i.e. modified in .htacess) the browser doesn't know this and it's be browser that makes the links.

Your fix would be to use absolute urls href="/subcategory.php?id..." as this will send you to http://yourdomain.com/subcategory.php?id...


Another problem appears in your redirect.

You are looking to match:

http://yourdomain.com/category.php/[Something]

but what I presume you want to match is:

http://yourdomain.com/category/[something]

Hope that helps.