adrenalin
adrenalin

Reputation: 135

Check if file from htaccess / Apache

In htaccess of site.ru I have some conditions RewriteCond, under which there is a transformation:

    RewriteRule ^ http://m.site.ru%{REQUEST_URI} [R = 301 , L]

Everything works fine, except for one thing. I don't need transformation

    http://m.site.ru%{REQUEST_URI}

if this page does not exist.

How do I check

    http://m.site.ru%{REQUEST_URI}

If it is important, m.site.ru is in /m/ folder of site.ru root.

P.S. For several days trying to think of a solution, to no avail. Do not want to believe that i cant do it with htaccess. Or even be sure that it can not be done, then begin to develop alternatives.

UPD:

RewriteCond %{HTTP_USER_AGENT} (android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge\ |maemo|midp|mmp|mobile.+firefox|netfront|opera\ m(ob|in)i|palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows\ (ce|phone)|xda|xiino [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a\ wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r\ |s\ )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1\ u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(\ i|ip)|hs\-c|ht(c(\-|\ |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(\ |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(\ |\/)|klon|kpt\ |kwc\-|kyo(c|k)|le(no|xi)|lg(\ g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-|\ |o|v)|zz)|mt(50|p1|v\ )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v\ )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|\ )|webc|whit|wi(g\ |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-) [NC]
RewriteCond /m/$1 -f [OR]
RewriteCond /m/$1 -d
RewriteRule ^(.*)$ http://m.theartstory.org/$1 [R=301,L]

This code doesnt work...

Upvotes: 0

Views: 89

Answers (2)

adrenalin
adrenalin

Reputation: 135

In my situation the solution was to check the condition:

RewriteCond %{DOCUMENT_ROOT}/m/%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/m/%{REQUEST_URI} -d

Upvotes: 0

TerryE
TerryE

Reputation: 10878

In a cond / rule pair, the match pattern of the rule is evaluated first, then the conditions and if they all pass then the rule substitution is executed.

If the [L] flag is set on the firing rule then the remaining rules are skipped and if the [SKIP:N] flag is set then the following N rules are skipped. These, plus the "-F" file existence check can implement what you want.

If you invert the logic of what you are saying then you want the redirection to occur if the page exists. So why not try:

RewriteCond  /m/$1    -f
RewriteRule  ^(.*)$   http://m.site.ru/$1      [R = 301 , L]

You might also find that the DOCUMENT_ROOT variable is already set to /m/ in which case you can also use %{DOCUMENT_ROOT} in the condition to remove the hard coded root path.

Upvotes: 1

Related Questions