Link to home
Start Free TrialLog in
Avatar of Jeremy Leys
Jeremy LeysFlag for New Zealand

asked on

How do I write a [B] flag for Rewriterules?

How do I write a B flag for Rewriterules for the URL below given that I can only rely on part of a URL param key substring "checkKey-" of checkKey-AlcoholDrugServices? (multiple categories can be chosen "checkKey-" is the common element)

I have a URL with GET vars I want to extract:

http://tsthealthpages.co.nz/index.php?option=com_mtree&cat_id=274&task=search&Itemid=null&checkKey-AlcoholDrugServices=Alcohol%20%26%20Drug%20Services&checkLoc-Canterbury=Canterbury

This is the output I get from print_r($_GET)

Array
(
    [option] => com_mtree
    [cat_id] => 274
    [task] => search
    [Itemid] => null
    [checkKey-AlcoholDrugServices] => Alcohol
    [checkLoc-Canterbury] => Canterbury
    [Drug_Services] =>
)

I want this output:

Array
(
    [option] => com_mtree
    [cat_id] => 274
    [task] => search
    [Itemid] => null
    [checkKey-AlcoholDrugServices] => Alcohol & Drug Services
    [checkLoc-Canterbury] => Canterbury
)

I think it has something to do with .htaccess not having a B flag for Rewriterules.
Example

As the problem I get is similar to :
"Given a search term of 'x & y/z', a browser will encode it as 'x%20%26%20y%2Fz', making the request 'search/x%20%26%20y%2Fz'. Without the B flag, this rewrite rule will map to 'search.php?term=x & y/z', which isn't a valid URL, and so would be encoded as search.php?term=x%20&y%2Fz=, which is not what was intended."

(The issue though is my example URL is not rewritten but the problem I face is similar, could possibly be a urldecode decoding the $_GET automatically but I have searched the code and been unable to find it)

I have posted another question in relation to this one:
https://www.experts-exchange.com/questions/28427882/How-do-I-json-encode-GET-vars.html?anchorAnswerId=40046749#a40046749

##
# @version              $Id: htaccess.txt 20196 2011-01-09 02:40:25Z ian $
# @package              Joomla
# @copyright    Copyright (C) 2005 - 2011 Open Source Matters. All rights reserved.
# @license              GNU General Public License version 2 or later; see LICENSE.txt
##

##
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE!
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations.  It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file.  If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url's.  If they work,
# it has been set by your server administrator and you do not need it set here.
##

##
#Authentication to password protect staging / test site directory 
##

AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /var/www/vhosts/tsthealthpages.co.nz/httpdocs/.htpasswd
Require valid-user

## Can be commented out if causes errors, see notes above.
Options +FollowSymLinks

## Mod_rewrite in use.

RewriteEngine On

## Begin - Rewrite rules to block out some common exploits.
# If you experience problems on your site block out the operations listed below
# This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to base64_encode data within the URL.
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL.
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL.
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL.
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
## End - Rewrite rules to block out some common exploits.

##
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root).
##

# RewriteBase /

## Begin - Joomla! core SEF Section.
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/component/) [OR]
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
## End - Joomla! core SEF Section.

Open in new window

SOLUTION
Avatar of Ray Paseur
Ray Paseur
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Jeremy Leys

ASKER

The site is a test site, when you visit you will get a 404 error unless you have an entry in your host file for it, it works fine in any normal PHP script just seems to be a problem with this implementation  of Joomla.
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Thanks Ray for all your help :)
Please see the EE grading guidelines.  When you give the worst possible grade anyone can give to a colleague at EE, you're expected to explain the marked-down grade.
http://support.experts-exchange.com/customer/portal/articles/481419

What was wrong with this answer?