?
Solved

Mod_Rewrite Condition to Redirect External Referrers

Posted on 2014-11-21
6
Medium Priority
?
189 Views
Last Modified: 2014-11-22
We inflate   EPUB's on our web site in advance, save them to e.g.

/public_html/media/books/#some-book-title#/web/ops/xhtml/some-page1.html

We then use LiveCode - RevIgniter to serve these inside an iFrame, inside our site wrapper.. this works great.

BUT  the  problem is Google is finding these pages, indexing and caching them and they are linked to and delivered outside our site wrapper. e.g.

http://dev.himalayanacademy.com/media/books/merging-with-siva/web/ops/xhtml/part_2ch_34a.html

I need to create a mod_rewrite condition that will redirect these to our CMS

in pseudo-code it would look like

IF
( RewriteCond $1 ^(media/books/[any string here, some reg ex I presume]/web/ops)  ) AND (referrer IS NOT localhost)
THEN
RewriteRule ^(.*)$ index.lc?/$1 [L]  
END IF

can you help me with the proper mod_rewrite rule for this?

Thanks!
0
Comment
Question by:Brahmanatha
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
6 Comments
 
LVL 51

Expert Comment

by:Steve Bink
ID: 40459537
Your pseudo code is very similar to your actual need:
RewriteCond %{HTTP_REFERER} !^localhost$ [NC]
RewriteRule ^/?(media/books/(some regex)/web/ops) /index.lc/$1 [L,NC]

Open in new window


You'll need to be more explicit about (some regex), but that is the general form you want.
0
 

Author Comment

by:Brahmanatha
ID: 40459818
Interesting... very simple really.  

"be more explicit about (some regex)" right...

The string ##-###-### that forms the URL segment between "books" and "web"

is a single string with no slashes (no additional segments)

/media/books/  ##-###-## /web/ops

where  #######is the title of a book. The strict convention on our site is: all lower case letters, words words delimited by dashes, underscore at the end followed by ISO 2 ltr language code where not English  e.g.

the-guru-chronicles
dancing-with-siva_es # in spanish

Some works in other languages have their titles in those languages, but the convention is that these strings ("file_id" in our mySql database) are always in the 0-127 range (ASCII) no unicode and no ANSI roman chars such as umlauts etc.  have trouble with figuring out how to make my reEx from being too "greedy") in needs to stop at the next slash in the URL string. How's this for an attempt?

RewriteRule ^/?(media/books/(.*?)/web/ops) /index.lc/$1 [L,NC]

or possibly more explicit?

RewriteRule ^/?(media/books/(.*\/)web/ops) /index.lc/$1 [L,NC]

Where the regex ends at the next slash?
0
 
LVL 51

Accepted Solution

by:
Steve Bink earned 2000 total points
ID: 40460131
You're on the right track, but let me see if I can clarify your requirements...

>>> The string ##-###-### that forms the URL segment between "books" and "web"
>>> is a single string with no slashes (no additional segments)

No problem there.  Detection pattern would be /books\/([^/]+)\/web/

>>> The strict convention on our site is: all lower case letters, words words delimited
>>> by dashes, underscore at the end followed by ISO 2 ltr language code where not English  e.g.

Even better..  /books\/([-a-z_]+)\/web/

The final question is, assuming there is a match, do you want the whole URL, or just the matched title?
# for the whole URL
RewriteRule ^/?(media\/books\/[-a-z_]+\/web/ops) /index.lc/$1 [L,NC]

# for just the title
RewriteRule ^/?media\/books\/([-a-z_]+)\/web/ops) /index.lc/$1 [L,NC]

Open in new window

0
Connect further...control easier

With the ATEN CE624, you can now enjoy a high-quality visual experience powered by HDBaseT technology and the convenience of a single Cat6 cable to transmit uncompressed video with zero latency and multi-streaming for dual-view applications where remote access is required.

 

Author Comment

by:Brahmanatha
ID: 40460273
the whole URL... our controller will need to see "/media" at beginning plus the matched title and the final segment, which is the page in the book to target. From there we will use another model/library script to display the page in our views.

Thanks for your help!
0
 

Author Comment

by:Brahmanatha
ID: 40460288
Hmmm I had to extend this a bit:

RewriteCond %{HTTP_REFERER} !^localhost$ [NC]
RewriteRule ^/?(media\/books\/[-a-z_]+\/web\/ops\/xhtml\/.*) /index.lc/$1 [L,NC]


and now it works! at least our CMS gets the URL...
0
 

Author Closing Comment

by:Brahmanatha
ID: 40460289
Thanks Steve!
0

Featured Post

Get MySQL database support online, now!

At Percona’s web store you can order your MySQL database support needs in minutes. No hassles, no fuss, just pick and click. Pay online with a credit card.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

It is possible to boost certain documents at query time in Solr. Query time boosting can be a powerful resource for finding the most relevant and "best" content. Of course the more information you index, the more fields you will be able to use for y…
A publishing tool, a Version Control System, or a Collaboration Platform! These can be some of the defining words for the two very famous web-hosting Git repositories: Bitbucket and Github. Git is widely used amongst the programmers and developers f…
This video teaches users how to migrate an existing Wordpress website to a new domain.
Learn how to set-up custom confirmation messages to users who complete your Wufoo form. Include inputs from fields in your form, webpage redirects, and more with Wufoo’s confirmation options.

800 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question