Shorten Joomla URL - not Joomla specific(!)

Shown below is the sample Joomla .htaccess file. I’ve had a request to rewrite the following URL:

Current non-SEF URL: /index.php?option=com_content&view=article&id=88&Itemid=87
Current SEF URL: /about-us/publications = rewritten by Joomla

Required SEF URL: /publications

How can I achieve this as I keep getting stuck in ‘too many loops’ errors (presumably as the URLs are very similar). I currently have

RewriteRule ^/publications$ “http://www.affinitytrust.org/index.php?option=com_content&view=article&id=88&Itemid=87” [R=301]


Options +FollowSymLinks
RewriteEngine On

RewriteRule ^/publications$ "http://www.affinitytrust.org/index.php?option=com_content&view=article&id=88&Itemid=87" [R=301]

RewriteCond %{HTTP_HOST} ^.*affinitytrust.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^.*affinitytrust.org.uk$ [OR]
RewriteCond %{HTTP_HOST} ^.*tactltd.org$ [OR]
RewriteCond %{HTTP_HOST} ^.*affinitytrust.com$ [NC]
RewriteRule ^(.*)$ http://www.affinitytrust.org/$1 [R=301,L]

RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\\%3D) [OR]
# Block out any script trying to base64_encode crap to send via 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]
#
########## Begin - Joomla! core SEF Section
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
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

petersen,

You might benefit from reading the mod_rewrite tutorial linked in my signature as it contains explanations and sample code. It’s helped may members and should help you, too.

However, your question is a quick one to answer so, after Joomla’s domain redirection, insert this code:

# requested query string redirection
RewriteCond %{QUERY_STRING} ^option=com_content&view=article&id=88&Itemid=87$
RewriteRule ^index\\.php$ publications [R=301,L]

# requested about-us/publications redirection
RewriteRule ^about-us/publications$ publications [R=301,L]

There are plenty of examples of redirections like this across the Internet as well as within SitePoint but the link in my signature should have you as smart as other members on the topic of mod_rewrite in just a few minutes.

Regards,

DK

Thank you David.

In fact, I had it the wrong way round, I wanted /publications to direct to /about-us/publications so the final code I used was

# requested about-us/publications redirection
RewriteRule ^publications$ /about-us/publications [R=301,L]

I was getting muddled with Joomla’s redirects. Thanks for the pointer.

petersen,

:tup: Aw, that’s a newbie mistake (thinking backward about mod_rewrite’s redirections) so I’m sure you’ll not make that mistake again. Tip: learn to “think” like Apache as it makes its pass(es) through your mod_rewrite code and you’ll be far ahead of the game!

Regards,

DK