I am working on some SEO for my site, and using urls like category/this-cat.html and category/this-cat-p2.html to redirect to index.php?mode=viewCat&id=this-cat and index.php?mode=viewCat&id=this-cat&start=10 respectively.
The problem is that my RewriteRule needs a conditional to check if the -p2 part is present in the URL, and then return either 0 or the digit after p.
Current rule:
RewriteRule ^category/(.*?)\.html$ index.php?mode=viewCat&title=$1
I would have thought that the correct syntax for this would have been:
RewriteRule ^category/(.*?)(?(-p)(.*?)|0)\.html$ index.php?mode=viewCat&title=$1&start=$2
however, this causes the server to return a 500 error.
Even after having read tutorials and worked with them for the past week, I still have little grasp on them. Can anyone explain how to make a conditional like this work?
You’re close. I believe what you are trying to do is not capture the optional
-p#grouping, but want the digit if it exists. The non-capture flag for a group is a?:prefix.Note: I used
\d(digit) as it’s better to be specific about what you are matching. Alsostartwill have a digit or nothing. Your server-side code is better suited to handle the rest of the logic you described.