Solved

Mod_Rewrite Condition to Redirect External Referrers

Posted on 2014-11-21
6
171 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
  • 4
  • 2
6 Comments
 
LVL 50

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 50

Accepted Solution

by:
Steve Bink earned 500 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
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 

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

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

A Change in PHP Behavior with Session Write Short Circuit (http://php.net/manual/en/book.session.php#116217) (Winter 2014)** With the release of PHP 5.6 the session handler changed in a way that many think should be considered a bug.  See the note …
Developer tools in browsers have been around for a while, yet they are still heavily underused by developers. Developers still fix html or CSS then refresh page to see effect, or they put alert or debugger in JavaScript and then try again and again …
Use Wufoo, an online form creation tool, to make powerful forms. Learn how to selectively show certain fields based on user input using rules to gather relevant information and data from your forms. The rules feature provides you with an opportunity…
Learn how to set-up PayPal payment integration in your Wufoo form. Allow your users to remit payment through PayPal upon completion of your online form. This is helpful for collecting membership payments, customer payments, donations, and more.

747 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now