I am using below rule to read the URL like
URL:
http://www.example.com/blog/sampe-post-title/10004/
RULE:
RewriteRule (.*)/(.*)/([0-9]+)/$ $1/details.asp?mod_id=$3 [NS,I]
Everything was fine untill I discovered that links coming via feedburner are not working anymore. Because feedburner adds some extra parameter to URL for stats/tracking etc.
For example www.example.com/blog/sampe-post-title/10004/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed:+somesite+(my+feed)
My rewrite URL doesn't recognizes the above URL anymore. Any idea how to deal with it?
Try adding a rule for the feedburner URLs:
RewriteRule (.*)/(.*)/([0-9]+)/\?(.*)$ $1/details.asp?mod_id=$3&$4 [NS,I]
I added an extra RegEx group at the end to capture everything after the question mark and place it after mod_id. You could probably combine this with your other URL if you only wanted to have one rule for some reason, but you might as well just have two.
Try the QSA flag to get the original requested URL query automatically appended to the new one.
I managed to figure out the answer on my own: just replace the ending $ with .* That's it!
Here is the modified rule:
RewriteRule (.*)/(.*)/([0-9]+)/.* $1/details.asp?mod_id=$3 [NS,I]
Related
I'm using IIS7.5 and have a rule for rewriting a URL...
The rule is:
^trade/new_products/page([^/]+)/?.*$
But, this is only working when I don't include a slash - e.g.
http://www.website.com/trade/new_products/page1
I'd like it to also work with
http://www.toppstiles.co.uk/trade/new_products/page1/
Can I do this or do I need a separate rule?
This group ([^/]+) is catching everything but slash. If your page is only numeric you can try this one:
^trade/new_products/page([0-9]+)/?.*$
If not, you can use the non greedy modifier on the multiplier(+?):
^trade/new_products/page([^/]+?)/?.*$
Sorry - the rule was working as expected - it was another issue that was causing my problem!
I need to rewrite some url on my site
http://wwww.example.com/poem.php?s=to-sally
to
http://wwww.example.com/poems/to-sally
I wrote this rule but doesnt work
RewriteRule ^poems/([a-zA-Z0-9-]+)$ poem.php?s=$1
A couple things:
Make sure you have RewirteEngine On, and actually have the mod_rewrite module loaded and running
I believe the paths being matched against start with /, but your rule dictates that the first character is p. Try replacing your match expression with ^/poems/([a-zA-Z0-9-]+)$ and see if that does the trick.
I want to redirect all these kind of requests
http://www.example.com/2013/01/my-sample-post/feed
or
http://www.example.com/2013/01/my-sample-post/feed/
to
http://www.example.com/2013/01/my-sample-post/
I am using sinatra and rack--rewrite gem.
rewrite %r{/*/feed?}, '/$1' // not working..
You missed a dot in the regex. You also need a capture group with () around the wildcard, so it should be (.*) between the slashes. Iguess you are also missing a slash at the end. This should work:
rewrite %r{/(.*)/feed/?}, '/$1'
I'm using mod Rewrite to rewrite part of the URL to a query parameter
URLs are of the form
http://www.my_site.com/ABC
where ABC is the bit to force into a query parameter to my index.php in a sub directory
My .htaccess has the following:
RewriteEngine on
RewriteRule ^/?([a-zA-Z0-9]+)/?$ directory/index.php?Site=$1 [L]
When I have a lowercase ABC e.g:
my_site.com/abc
the browser URL remains unchanged and the page works perfectly with abc being passed in the GET.
However, when ABC is UPPERCASE e.g:
my_site.com/ABC
the URL in the browser becomes:
my_site.com/ABC/?Site=ABC
It works OK and ABC is still in the GET parameter but it looks ugly!
Why does case affect this and can I make BOTH upper and lower case maintain the original URL?
Further note: I tried an example of a different server and it worked perfectly! Any ideas if there are server settings that could affect this?
Thanks for any assistance
I've solved it - as sidoh said something else is going on.
If there is a directory on my server which is the same name as the parameter the mod_rewrite adds the query to the URL.
e.g.
If I've got a directory ABC on the server then using my mod_rewrite with www.domain.com/ABC results in the browser URL www.domain.com/ABC/Site=ABC - if no directory ABC all is fine and the URL remains www.domain.com/ABC (which is what I want).
Since I'm on Linux ABC is different to abc - which explains the apparent case sensitive nature of the behaviour.
Thanks to all for their inputs.
Do you mean, the [NC] nocase flag? Which will make the rule be matched in a case-insensitive manner. Means, it will doesn't care whether letters appear as upper-case or lower-case.
RewriteRule ^([a-zA-Z0-9]+)/?$ /directory/index.php?Site=$1 [NC]
I think, you want to rewrite a URL such /bigSMALL into /directory/index.php?Site=BIGsmall? If am I right, then the problem is in the program and not in URL remapping. However, in MySQL database, when you're getting the value of a query string for querying a WHERE value, it is match in a case-insensitive. Take a look at the picture:
Are you developing a website? If ever, then what DBMS are you using? Maybe, MySQL?
I am trying to create a filter system for products and keep the URL's friendly, i am using a map file for the filter params and the following re-write code.
The url could contain, one param or 10 params and will be bulit like so
Start URL: www.domain.com/climbing-frames/
First Param: www.domain.com/climbing-frames_rockwall/
Second Param: www.domain.com/climbing frames_rockwall_rope-ladder/
And so on.....
The rewrite rule so far
RewriteMap features txt:features.txt
RewriteCond ${features:$1|NOT_FOUND} !NOT_FOUND
RewriteRule ^climbing-frames(?:_([^/]+))(?:_([^/]+))(?:_([^/]+))(?:_([^/]+))/ /get-features.cfm?(?1(param1=${features:$1|0}))(?2(,${features:$2|0}))(?3(,${features:$3|0}))(?4(,${features:$4|0}))
This works if 4 prams are entered but not if only two params are entered. This is driving me crazy!
Any clues would be greatly appreciated.
Jason
I think you're close - there might be a looping approach that would be better, but I do tend to go with the way you're going.
I see how you're doing the non-capturing underscore, then capturing the next characters. Instead of looking for not-slash, look for not-underscore. With the not-slash, it's going to grab the whole thing in the first group. That is, look for underscore-not-underscore.
Then (getting to the real fix), each section needs to be optional - the rule above is requiring the four sections. So add a ? to the end of each one, as:
RewriteRule ^climbing-frames(?:_([^_]+))(?:_([^_]+))?(?:_([^_]+))?(?:_([^_]+))?/
I left the first group required, since it practically should be there, and the RewriteCond is checking for it anyway.