I have a Problem with my Nginx rewrite rule.
I have two Pages :
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.