sotusotusotu Posted April 13, 2010 Share Posted April 13, 2010 Hi all, I'm trying to re-write this: www.domain.com/search?={SEARCH WORDS HERE} to: www.domain.com/rewrite_files/search.php?q={SEARCH WORDS HERE} This is what I have written so far but no luck: RewriteRule ^search?([^?q=]+) rewrite_files/search.php?q=$1 [NC,Last] Can anyone please help? Thanks Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/ Share on other sites More sharing options...
cags Posted April 13, 2010 Share Posted April 13, 2010 Sounds like you want something like this... RewriteRule ^search?=(.+)$ /rewrite_files/search.php?q=$1 [NC,L] Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1040940 Share on other sites More sharing options...
sotusotusotu Posted April 13, 2010 Author Share Posted April 13, 2010 Thanks cags but I get: The requested URL /search.php was not found on this server. Note: I am using the following ReWrite code at the top of my .htaccess file in order to remove the .php from my pages: RewriteEngine On Options All -Indexes RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L] RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$" RewriteRule .* - [R=301,NC] I don't think this should make any difference to the 404 error though. Any ideas? Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1040983 Share on other sites More sharing options...
cags Posted April 13, 2010 Share Posted April 13, 2010 What URL are you typing in to test it? Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1040985 Share on other sites More sharing options...
sotusotusotu Posted April 13, 2010 Author Share Posted April 13, 2010 Just testing it on my apache localhost: http://localhost/search?q=comet Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1040990 Share on other sites More sharing options...
cags Posted April 13, 2010 Share Posted April 13, 2010 Ok, I see two problems. Firstly that doesn't actually match your example, it's probably just a typo but your example didn't have a q in it. Secondly I'm being an idiot. RewriteRule will not match any part of the query string. Anything after the question mark is the query string. Try something more like this instead. The two key points are it's checking the query string contains q={something}, it uses the QSA flag to attach the query string to the new URL. RewriteCond %{QUERY_STRING} q=[^&]+ RewriteRule ^search/?$ /rewrite_files/search.php [QSA,NC,L] Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1040991 Share on other sites More sharing options...
sotusotusotu Posted April 13, 2010 Author Share Posted April 13, 2010 Appologies for the typo. No joy I'm afraid - still the same 404 error. Just to clarify I want my ReWrite to be: www.domain.com/search?=hello No curly brackets, I was just using these in my example. I did try removing the curly brackets like this: RewriteCond %QUERY_STRING q=[^&]+ RewriteRule ^search/?$ rewrite_files/search.php [QSA,NC,L] No joy again. Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1040996 Share on other sites More sharing options...
cags Posted April 13, 2010 Share Posted April 13, 2010 This is a technical subject. Accuracy is everything. Yet again you have given an example without the q, is it supposed to be there or not? What you have posted is so far as I know an invalid URL. The curly braces are supposed to be there, the whole point of that RewriteCond is that you wish to compare against the QUERY_STRING, that is the syntax used. You appear to have changed the rewritten path to not include a forward slash at the start of it, this is quite likely the reason you are getting a 404 error. Since you seemingly haven't used the RewriteBase directive it is probably looking in the wrong place. Adding the R flag should give you a good idea of why it isn't working as it will redirect the page and you can see if it's actually pointing to a file that exists. Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1041036 Share on other sites More sharing options...
sotusotusotu Posted April 13, 2010 Author Share Posted April 13, 2010 Appologies again, the q is supposed to be there. You're right this does sound as though it could be a bit technical for me. The whole reason why I wanted to use the this method is that my original method ('www.domain.com/search/keywords') does not like special characters (&, #, +, etc) or encoded characters ('www.domains.com/search/1%261'). Do you know if there is a reason why the htaccess file does not seem to like these characters in the URI? I'm using: RewriteRule ^search/([^/]+) rewrite_files/search.php?result=$1 [NC,Last] Thanks for all you help. Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1041188 Share on other sites More sharing options...
cags Posted April 14, 2010 Share Posted April 14, 2010 All the characters you listed are 'special characters' for URIs, they are reserved characters that have a special meaning in a URI. For example & is for adding a second GET parameter, + is an encoded space etc. These character's cannot be just typed into an address bar and be expected to perform as a literal character. The solution is to use urlencode'd characters, of which %26 is obviously one. There is no reason why this won't work, if you can't get it working then your problem actually lies elsewhere. The problem you will probably have encountered is if you are using %26 as your test case. This is an ampersand (&) which is not a HTML safe character and would probably need to be passed through something like htmlentities before it can safely be echo'd out, otherwise if the following character is a letter it will 'break'. Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1041512 Share on other sites More sharing options...
sotusotusotu Posted April 14, 2010 Author Share Posted April 14, 2010 Yes I understand what you are saying, this is why I'm encoding the 'special characters' in the URI. The reason I believe it is the .htaccess file that is causing me not to be able to display my result is because if I disable the .htaccess file and go straight to my search page (in this case rewrite_files/search.php?result=1%261) it all works fine using 'echo urldecode($_GET['result']);'. It's a strange one - unless you can think of anything else it would be? Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1041891 Share on other sites More sharing options...
sotusotusotu Posted April 14, 2010 Author Share Posted April 14, 2010 Just one more thing, I just tried enabling the .htacess and went to /rewrite_files/search.php?result=1%261 andd it worked. This leads me to think it could be something wrong with the following lines: RewriteEngine On Options All -Indexes RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L] # Return 404 if original request is /foo/bar.php RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$" RewriteRule .* - [R=301,NC] Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1041893 Share on other sites More sharing options...
cags Posted April 14, 2010 Share Posted April 14, 2010 With regards to your first post you could possibly play around with the NE flag (no-escape), other than that I don't know. As for the second post, I don't know where you got the code from, but I don't really understand the objective. The first line I assume is supposed to append .php to the end of the file if there is no file extension? Not sure why you have the question mark in the character class as this wouldn't be a valid URI character anyway. The second little snippet has spaces in the Regex pattern of the RewriteCond, which are again not valid URI characters. I've also never seen a RewriteRule that redirects to -, I won't say that it's wrong because it may just be something I've never seen, but it seems weird to me, what page do you expect it to redirect to? Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1041896 Share on other sites More sharing options...
sotusotusotu Posted April 14, 2010 Author Share Posted April 14, 2010 I found the code a few month's back. It was an example of how to strip the '.php' extension from my file names. It works fine on every page other than when using special characters in my search. Here's the original code with comments: RewriteEngine On Options All -Indexes # Rewrite /foo/bar to /foo/bar.php RewriteRule ^([^.?]+)$ %{REQUEST_URI}.php [L] # Return 404 if original request is /foo/bar.php RewriteCond %{THE_REQUEST} "^[^ ]* .*?\.php[? ].*$" RewriteRule .* - [R=301,NC] I've also just tried removing code in my .htaccess file and just use the basic: RewriteEngine on RewriteRule search/(.*) rewrite_files/search.php?result=$1 No joy again - pulling my hair out Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1041935 Share on other sites More sharing options...
sotusotusotu Posted April 14, 2010 Author Share Posted April 14, 2010 Yay - finally a breakthrough. FYI, I used the following PHP code: $get_URI = explode("/", $_SERVER["REQUEST_URI"]); $search_text = ucwords(urldecode($get_URI[4])); echo $search_text; Thanks for all your help anyway Quote Link to comment https://forums.phpfreaks.com/topic/198372-rewrite-querystring-problem/#findComment-1041957 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.