Belgin Fish
Belgin Fish

Reputation: 19837

Rewrite rules not working htaccess

I have the following htaccess rewrite rules

RewriteRule ^shows-watch/(.*).html?$ show.php?name=$1 
RewriteRule ^shows-watch/(.*)/season-(.*).html?$ show.php?name=$1&season=$2
RewriteRule ^shows-watch/(.*)/season-(.*)/episode-(.*).html?$ show.php?name=$1&season=$2&episode=$3

Now the thing is, the first rewrite rule works just fine

RewriteRule ^shows-watch/(.*).html?$ show.php?name=$1 

It's just when I try using the others, only name get variable is being passed and not

$_GET['season']

or

$_GET['episode']

i know it's most likely something simple I'm missing or have done, but I just can't seem to get it working.

Upvotes: 1

Views: 2576

Answers (2)

Prix
Prix

Reputation: 19528

Give this a try:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteRule ^shows-watch/([^/]+)/season-([^/]+)/episode-([^/]+).html?$ show.php?name=$1&season=$2&episode=$3 [QSA,NC,L]
RewriteRule ^shows-watch/([^/]+)/season-([^/]+).html?$ show.php?name=$1&season=$2 [QSA,NC,L]
RewriteRule ^shows-watch/([^.]+)\.html?$ show.php?name=$1 [QSA,NC,L]

The order is very important so they don't overlap you also need the L flag to stop when needed.

This assumes your .htaccess is on the root folder of your domain along with the show.php file and that you are accessing it like this:

domain.com/shows-watch/Show Name.html
domain.com/shows-watch/Show Name/season-1.html
domain.com/shows-watch/Show Name/season-1/episode-10.html

Upvotes: 2

Baraa Al-Tabbaa
Baraa Al-Tabbaa

Reputation: 753

The first line gets all the links because it matches all the links.
Try reverse the order:

RewriteRule ^shows-watch/(.*)/season-(.*)/episode-(.*).html?$ show.php?name=$1&season=$2&episode=$3    
RewriteRule ^shows-watch/(.*)/season-(.*).html?$ show.php?name=$1&season=$2
RewriteRule ^shows-watch/(.*).html?$ show.php?name=$1 

Or you can exclude slashes like this:

RewriteRule ^shows-watch/([^/]*).html?$ show.php?name=$1 
RewriteRule ^shows-watch/([^/]*)/season-([^/]*).html?$ show.php?name=$1&season=$2
RewriteRule ^shows-watch/([^/]*)/season-([^/]*)/episode-([^/]*).html?$ show.php?name=$1&season=$2&episode=$3

Upvotes: 1

Related Questions