RewriteRule to accept 3 parameters but 2nd & 3rd param are optional - mod-rewrite

mydomain.com/MyFolder/parameter-1
I have this htaccess RewriteRule -
RewriteRule ^([a-z0-9\-]+)/?$ index.php?c=$1 [NC,L]
The htaccess file is inside [MyFolder] and this only accept a single parameter.
How can do a RewriteRule to accept 3 parameters but the 2nd and 3rd parameters are optional so that the following 4 URLs are ALL possible
mydomain.com/MyFolder/param-1/param-2/param-3
mydomain.com/MyFolder/param-1
mydomain.com/MyFolder/param-1/param-2
mydomain.com/MyFolder/param-1/param-3
Edit : Ill make it that PARAM3 always starts with the word [pop]
Thanks

RewriteRule ^([a-z0-9\-]+)/?([a-z0-9\-]+)?/?([a-z0-9\-]+)?/?$ index.php?c=$1&d=$2&e=$3 [NC,L]
This would work for:
mydomain.com/MyFolder/param-1/param-2/param-3
mydomain.com/MyFolder/param-1
mydomain.com/MyFolder/param-1/param-2
with $_GET[d] and $_GET[e] having as value '' in certain cases.
Having:
mydomain.com/MyFolder/param-1/param-2
mydomain.com/MyFolder/param-1/param-3
Seems impossible to me as is, how can you know if the second is param 2 or param 3 ?

Related

Rewrite rule 301 with different formatting

Okay, so I need to find the correct syntax for what I want to do.
These links:
http://www.example.com/sub1/sub2/product1/
(...)
http://www.example.com/sub1/sub2/product700/
need to redirect to
http://www.example.com/sub3/product1-newsite/
(...)
http://www.example.com/sub3/product700-newsite/
What I have tried:
RewriteEngine On
RewriteRule ^/sub1/(.*)/(.*)$ http://www.example.com/subdir/$1-newsite/ [R=301,L]
For all the 700 products.
Also I need to make exeptions for certain products.
Can someone see what I'm doing wrong?
I think it's just the numbering on the regular expression that is an issue.
$1 is the first matched group, $2 is the second, etc. $0 is for the entire string that matched (ie. the whole path).
Try:
RewriteEngine On
RewriteRule ^/sub1/sub2/(.*)$ http://www.example.com/subdir/$1-newsite/ [R=301,L]
or
RewriteEngine On
RewriteRule ^/sub1/(.*)/(.*)$ http://www.example.com/subdir/$2-newsite/ [R=301,L]
Edit
Ah... had a thought... the first regex in the capture may be being a bit too greedy... since it can match:
^/sub1/[sub2/product1-newsite]/[] so $1 will be sub2/product1-newsite and $2 will be empty (.* can happily match nothing).
So we need to make sure it doesn't grab too much.
RewriteEngine On
RewriteRule ^/sub1/([^/]+)/(.+)/$ http://www.example.com/subdir/$2-newsite/ [R=301,L]
Changing the * to + makes sure we match at least one character.
Changing the . to [^/] makes sure we match "anything except a /".
Added a / on the end to make sure the $2 doesn't capture the trailing slash.
That should hopefully fix it.

mod_rewrite, help me forward a page

I'm sorry but I don't really completely understand how mod_rewrite works but I'd like to basically change the url:
/index.php?category=value1&video=value2
to be accessed via /value1/value2
could anybody tell me how to do this? thanks^^
Try this one here:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?(.*)/(.*)$ index.php?category=$1&video=$2 [L]
The first line enabled the usage from the mod_rewrite.
The second line is a condition which checks if there is a file with that name. If not continue with the next line.
The third one is a regular expression. The ^ markes the beginning and the $ the end of it. The /? means that at the beginning should be a optional / (this depends on the server configuration). The (.*) meanes a range of chars which from 0 until n. The brackets meanes that there is a group which can be called as $n here as $1 and $2.
Please note that AllowOverride All must be enabled in the server configuration.

Trying to write a mod_rewrite rule

I've changed my CMS and need to write a mod_rewrite rule to help redirect some of the old URLs.
What I'd like to do is:
remove "blog/archives"
replace underscores with dashes
replace ".html" with a trailing slash
The old link:
http://example.com/blog/archives/the_post_title.html
The new link
http://example.com/the-post-title/
To address 1 & 3 I thought something along the lines of this might work, but it's not.
RewriteRule ^/blog/archives/([A-Za-z0-9-]+)/?.html$ $1 [L]
Thanks for your suggestions.
For 1 and 3
RewriteRule ^/blog/archives/(.*?).html$ /$1/ [L,R=permanent]
(note that R=permanent use a 301 redirect, which will be cached for long time but does move your pagerank to the new URL. Use [L,R] to use normal redirection)

apache rewriterules

How can I match a url like that:
1/2/3/
it means:
1 = http:// www.mysite.com
2 = may be mypage or my-page
3 = may be myparam1 or myparam-1 or my-param-1
--> 1 should be pre-defined
--> 2 and 3 may contain only letters or alphanumeric or alphanumeric plus one hyphen or two (-)
I need a reqular expression to use with htaccess to rewrite a url to another url with some $_GET params.
Thanks in advance.
Try this rule:
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} =www.example.com
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/$ foo?1=$1&2=$2

How can i set optional parameter in the Mod Rewrite-Syntax?

I'm german and i'm sorry about my damn sucking englisch.
RewriteRule ^admin/(.*)$ index.php?admin=$1
here is an example.
so the result i want is for example the id within, but as an optional parameter:
RewriteRule ^admin/(.*)/id-(.*)$ index.php?admin=$1&id=$2
Here the id don't must set thats what i want :)
The Link example (i want that here is the same result):
www.exmple.com/admin/edit-user
www.exmple.com/admin/edit-user/id-1
the problem is: the rule take anytime the first way with only this:
RewriteRule ^admin/(.*)$ index.php?admin=$1
can anybody help me ? :)
loving greetings m0.
Try changing the order of your rules and don't forget the [L] flag at the end :
RewriteRule ^admin/(.*)/id-(.*)$ index.php?admin=$1&id=$2 [L]
RewriteRule ^admin/(.*)$ index.php?admin=$1 [L]
Try an optional capture group:
RewriteRule ^admin/([^/]*)(/id-(.*))?$ index.php?admin=$1&id=$3
If there's no id specified, then $3 will be blank and you'll just get a blank id rewritten:
index.php?admin=edit_user&id=
If it is specified, then you'll get the id too:
index.php?admin=edit_user&id=1
The expression .* is too general as it matches an arbitrary length of arbitrary characters. A better expression would be [^/]+ that matches only one ore more arbitrary characters except / (path segments separator).
So try these rules:
RewriteRule ^admin/([^/]+)$ index.php?admin=$1
RewriteRule ^admin/([^/]+)/id-([^/]+)$ index.php?admin=$1&id=$2
For the second rule you could also replace the second [^/]+ with [1-9][0-9]* that would match only integers greater than 0.
RewriteRule ^admin/([^/]+)/id-([1-9][0-9]*)$ index.php?admin=$1&id=$2
try this:
RewriteRule /admin/([^/]*)/?(id-(.*))?$ index.php?admin=$1&id=$3

Resources