homepage Welcome to WebmasterWorld Guest from 50.17.86.12
register, free tools, login, search, pro membership, help, library, announcements, recent posts, open posts,
Become a Pro Member
Home / Forums Index / Code, Content, and Presentation / Apache Web Server
Forum Library, Charter, Moderators: Ocean10000 & incrediBILL & phranque

Apache Web Server Forum

    
Cant get RewriteCond to capture URL
rewritecond, rewriterule, problems capturing url
hottrout



 
Msg#: 4542597 posted 5:13 pm on Feb 5, 2013 (gmt 0)

I have dony many Rewritecond rules before but for the life of me I can not figure out why this one will not trigger.

The url I want to catch is this

http://www.example.com/files/index.php?folder=M/IPHONE/(what ever comes next)

I want to 301 it to

http://www.example.com/files/index.php?folder=M/IOS/(what ever comes next)

The code I am using is

RewriteCond %{THE_REQUEST} ^files/index\.php\?folder\=M/IPHONE([^\ ]+)\ HTTP/

RewriteRule ^files/index\.php http://www.example.com/files/index.php?folder=M/IOS/%1 [R=301,NC,L]

------------------

I am most likely doing something very stupid but for the life of me I can't see it. I have been looking at it too long to be honest.

 

lucy24

WebmasterWorld Senior Member lucy24 us a WebmasterWorld Top Contributor of All Time Top Contributors Of The Month



 
Msg#: 4542597 posted 12:03 am on Feb 6, 2013 (gmt 0)

RewriteCond %{THE_REQUEST} ^files/

THE_REQUEST is the full request string beginning with GET (or similar), space, directory-slash ... and then the part you've got.

This is the part where you kick yourself. Been there. Done that.

The condition will only be avaluated if the user asks for "index.php" by name. The rule itself will fail-- and the condition won't be evaluated at all-- if they ask for files/ alone. Unless files/ is a real, physical directory; if so, the Rule may kick in on the second pass, after mod_dir has done its thing. But you probably want (index\.php)?$ to be safe.

g1smd

WebmasterWorld Senior Member g1smd us a WebmasterWorld Top Contributor of All Time 10+ Year Member



 
Msg#: 4542597 posted 12:06 am on Feb 6, 2013 (gmt 0)

What Lucy said, plus: the part...

%{THE_REQUEST} ^files

should be

%{THE_REQUEST} ^[A-Z]{3,9}\ /files

hottrout



 
Msg#: 4542597 posted 7:38 pm on Feb 6, 2013 (gmt 0)

Slaps forehead, makes changes but.... no joy and my code now looks like this. Any ideas?

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /files/index\.php\?folder\=M/IPHONE([^\ ]+)\ HTTP/

RewriteRule ^files/index\.php http://www.example.com/files/index.php?folder=M/IOS/%1 [R=301,NC,L]

g1smd

WebmasterWorld Senior Member g1smd us a WebmasterWorld Top Contributor of All Time 10+ Year Member



 
Msg#: 4542597 posted 7:43 pm on Feb 6, 2013 (gmt 0)

Does it return a redirect and the new URL fail to result in content, or does it fail to redirect?

The Live HTTP Headers extension for Firefox might be useful.

The = in the pattern does not need to be escaped.

Adding ( and )? round the index\.php (and adding $ to the one in the rule) is also a good idea.

hottrout



 
Msg#: 4542597 posted 7:51 pm on Feb 6, 2013 (gmt 0)

It just does not get caught. If I enter the url

http://www.example.com/files/index.php?folder=M/IPHONE/Apps

or

http://www.example.com/files/index.php?folder=M/IPHONE/Games

It just stays at the URL with no content.

g1smd

WebmasterWorld Senior Member g1smd us a WebmasterWorld Top Contributor of All Time 10+ Year Member



 
Msg#: 4542597 posted 8:13 pm on Feb 6, 2013 (gmt 0)

Just to be sure, the code is located in the root htaccess file, not in a folder?

hottrout



 
Msg#: 4542597 posted 8:18 pm on Feb 6, 2013 (gmt 0)

It is in the root. This is my code now.

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /files/index\.php\?folder=M/IPHONE([^\ ]+)\ HTTP/

RewriteRule ^files/index\.php http://www.example.com/files/index.php?folder=M/IOS/%1 [R=301,NC,L]

hottrout



 
Msg#: 4542597 posted 8:41 pm on Feb 6, 2013 (gmt 0)

I change the code to this just to see but it also did not catch and redirect. What gives?

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ ([^/]+/)*index\.php\?folder=M/IPHONE([^\ ]+)\ HTTP/

RewriteRule ^files/index\.php http://www.example.com/files/index.php?folder=M/IOS/%1 [R=301,NC,L]

lucy24

WebmasterWorld Senior Member lucy24 us a WebmasterWorld Top Contributor of All Time Top Contributors Of The Month



 
Msg#: 4542597 posted 11:53 pm on Feb 6, 2013 (gmt 0)

:: jumping up and down excitedly ::

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ ([^/]+/)*index\.php\?folder=M/IPHONE([^\ ]+)\ HTTP/

RewriteRule ^files/index\.php http://www.example.com/files/index.php?folder=M/IOS
/%1 [R=301,NC,L]


I note with interest that the Forums will only honor "size=" if it comes inside the "red" tags. Imagine that.

Then again, this may have nothing to do with the rule's failure to execute, and will only kick in after you've solved some other, unrelated problem. Never mind the screen content: What does your address bar say when you try the rule?

hottrout



 
Msg#: 4542597 posted 12:33 am on Feb 7, 2013 (gmt 0)

The address bar does not change at all. I forgot to change to %2 after adding the ([^/]+/)*

Any other ideas?

g1smd

WebmasterWorld Senior Member g1smd us a WebmasterWorld Top Contributor of All Time 10+ Year Member



 
Msg#: 4542597 posted 12:44 am on Feb 7, 2013 (gmt 0)

Slash isn't supposed to be a valid character within query string parameters.

It's reserved as a folder separator within the path part of a URL.

Is the slash arriving in an encoded form?



In a related question, why does the new URL look like
http://www.example.com/files/index.php?folder=M/IOS/Games
and not something like this
http://www.example.com/files/M/IOS/Games
here?

lucy24

WebmasterWorld Senior Member lucy24 us a WebmasterWorld Top Contributor of All Time Top Contributors Of The Month



 
Msg#: 4542597 posted 1:52 am on Feb 7, 2013 (gmt 0)

! And I wasn't even thinking about that aspect of the slash issue, just noting that there are more of them on one side than the other.

hottrout, the "related question" above isn't about the code as written, it's a philosophical question: As long as you're redirecting, why aren't you redirecting to a prettier query-less URL? (I wondered the same thing myself but sat on my hands ;))

hottrout



 
Msg#: 4542597 posted 9:06 am on Feb 7, 2013 (gmt 0)

At the minute my PHP code generates the URLs for folder= based on the actual folder structure under that subfolder. This is something that I plan on changing in the near future so that visable URLs are devoid of the parameters. Until I rewrite the PHP code this has to be the case.

I wanted to redirect the traffic going to folder=M/IPHONE to the new folder folder=M/IOS in the meantime so as to not loose visitors that are arriving at the old folder name and expwecting content.

Is there no way to do this with / in the parameter?

lucy24

WebmasterWorld Senior Member lucy24 us a WebmasterWorld Top Contributor of All Time Top Contributors Of The Month



 
Msg#: 4542597 posted 11:48 am on Feb 7, 2013 (gmt 0)

It's iffy. Can't you use some other character and let your php function convert it back into a directory slash? Or don't include that part in the query string at all, since it's simply m/something vs. m/something-else.

hottrout



 
Msg#: 4542597 posted 11:54 am on Feb 7, 2013 (gmt 0)

Really what I want to do is change

http://www.example.com/files/index.php?folder=M/IPHONE(whatever)

into

http://www.example.com/files/index.php?folder=M/IOS(whatever)

Is this possible?

g1smd

WebmasterWorld Senior Member g1smd us a WebmasterWorld Top Contributor of All Time 10+ Year Member



 
Msg#: 4542597 posted 12:12 pm on Feb 7, 2013 (gmt 0)

Try a simpler redirect using
...\?folder=M([^\ ]+)\ HTTP/ without a slash in your pattern (where "..." represents existing code that you don't alter), and redirect to example.com/?target=M%1 and see what the slash looks like in the address bar of the browser after the redirect. Don't worry that the redirected URL returns 404, you're only interested in what the address bar changes to. Redirect to a completely different hostname if you want, you're only interested in what the new URL "looks" like.


[edit: fix typo]

[edited by: g1smd at 12:45 pm (utc) on Feb 7, 2013]

hottrout



 
Msg#: 4542597 posted 12:21 pm on Feb 7, 2013 (gmt 0)

It returned a 500 server error

lucy24

WebmasterWorld Senior Member lucy24 us a WebmasterWorld Top Contributor of All Time Top Contributors Of The Month



 
Msg#: 4542597 posted 11:58 pm on Feb 7, 2013 (gmt 0)

That sounds like a typo. But it's a basic mod_rewrite test: If you change the rewrite into a redirect, you will see the result in your browser's address bar. Then you can see if (1) the redirect/rewrite is taking place at all, and (2) it's going to where it's supposed to go. When there are php scripts involved, you may need to change some other detail of the target as well, so the script can't do anything to it.

Again, all this is purely for experimentation. If you haven't already got MAMP/WAMP or linux equivalent (uh, it isn't called LAMP is it?) install it. It will not always be identical to your live setup, but it is definitely useful.

A 500-class error should show up in your error logs. Go have a look.

hottrout



 
Msg#: 4542597 posted 4:32 pm on Feb 28, 2013 (gmt 0)

Guess what guys. This problem was indeed also caused by the same htaccess file being unused but present in the folder. Just wanted to update you all that this hair pulling problem was down to the same thing.

Global Options:
 top home search open messages active posts  
 

Home / Forums Index / Code, Content, and Presentation / Apache Web Server
rss feed

All trademarks and copyrights held by respective owners. Member comments are owned by the poster.
Home ¦ Free Tools ¦ Terms of Service ¦ Privacy Policy ¦ Report Problem ¦ About ¦ Library ¦ Newsletter
WebmasterWorld is a Developer Shed Community owned by Jim Boykin.
© Webmaster World 1996-2014 all rights reserved