2014-07-05 3 views
1

다른 웹 사이트에서 하위 도메인으로 호스팅되는 웹 사이트가 있습니다. 나는 그것을 모바일 친화적으로 만들려고 노력하고있다. 지금까지 나는 그것이 사이트의 모바일 버전 (현재 Galaxy S3 전화 해상도와 만 호환 가능) (index.php 대신 index_m.php 임)으로 올바르게 리디렉션했습니다. 나는 사이트 (메뉴 막대, 로고, 꼬리말 등)의 미적 섹션의 모바일 버전을위한 대체 PHP 페이지 파일을 가지고있다. 그러나 업데이트 할 때 파일 세트 (실제 사이트 컨텐츠)를 두 개만 변경하려고합니다. 대부분의 경우, 적절한 모바일 페이지로 사용자를 보내는 대체 메뉴 모음 php가 있기 때문에 작동합니다. 문제는 사이트의 다양한 섹션에 링크 된 업데이트 및 하이라이트와 같은 페이지 섹션이 데스크톱 형식의 페이지에 대한 링크를 사용하고 있다는 것입니다.htaccess 모바일에있는 경우 동일한 폴더의 다른 파일로 특정 파일 리디렉션

여기 내 현재 htaccess 콘텐츠입니다. 특정 파일에 대해 다른 조건 세트를 추가하려면 어떻게합니까? (특히 games.php/games_m.php와 history.php/history_m.php) 같은 폴더에 있습니까?

Options +FollowSymLinks 
RewriteEngine on 

# if the browser accepts these mime-types, it's definitely mobile, or pretending to be 
RewriteCond %{HTTP_ACCEPT} "text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml" [NC,OR] 

# a bunch of user agent tests 
RewriteCond %{HTTP_USER_AGENT} "sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera" [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "mini|nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox"[NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie-"[NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc"[NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|iPhone"[NC] 
RewriteCond %{HTTP_USER_AGENT} "android|googlebot-mobile|iemobile|ipod|#opera mobile|palmos|webos" [NC] 

RewriteRule ^$ http://sc55.duke4.net/index_m.php [R=302] 

나는 통상적으로 하나가 모바일 페이지에 대한 완전히 다른 하위 도메인 또는 하위 폴더를 사용하는 것으로 알고 있지만, 내가 말했듯이 나는 한 번에 파일 한 세트를 업데이트하고 싶습니다. 그리고 나는 데이터베이스 시스템에 접근 할 수 없으며 두 웹 사이트 모두에서 데이터를 가져올 수 없습니다.

+0

는'추가한다 RewriteRule ^/(게임 | 역사) \ PHP는 $ http://sc55.duke4.net/$1_m.php [R = 302]' – hjpotter92

답변

1

문제는 하나의 조건 집합이 하나의 규칙에만 적용된다는 것을 깨닫고 있습니다. 동일한 조건을 따르는 규칙을 추가하는 방법은 무엇입니까? 한 가지 해결책은 조건을 반복하는 것이지만 너무 무거워요.

효율적인 대안은 if-then-else 논리를 사용하는 것입니다. 조건을 무효화 한 다음 파일을 그대로두고 다음 조건을 건너 뛰므로 조건이 충족 될 때 적용됩니다. 이것은 다음과 같을 것이다 :?.

# Do we meet NONE of the conditions? 
RewriteCond %{HTTP_ACCEPT} !(text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml) [NC] 
RewriteCond %{HTTP_USER_AGENT} !(sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera) [NC] 
RewriteCond %{HTTP_USER_AGENT} !(mini|nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox) [NC] 
RewriteCond %{HTTP_USER_AGENT} !(blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie) [NC] 
RewriteCond %{HTTP_USER_AGENT} !(portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc) [NC] 
RewriteCond %{HTTP_USER_AGENT} !(smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|iPhone) [NC] 
RewriteCond %{HTTP_USER_AGENT} !(android|googlebot-mobile|iemobile|ipod|#opera mobile|palmos|webos) [NC] 

# If so, THEN leave the request untouched (and optionally skip the following rules) 
RewriteRule^- [L] 
# If there are more non-mobile rewrite rules, skip the next two rules by using this instead: 
# RewriteRule^- [L,S=2] 

# ELSE (we meet some of the conditions): 
RewriteRule ^/?$ http://sc55.duke4.net/index_m.php [L,R=302] 
RewriteRule ^(games|history)\.php http://sc55.duke4.net/$1_m\.php [L,R] 
+0

감사합니다 ! 나는이 모든 것을 선언하는 방법에 정말로 고심하고있었습니다. 귀하의 코드를 입력했지만 내부 서버 오류가 발생하여 사이트가로드되지 않습니다. 거기에 더 추가해야 할 것이 있습니까? 사과드립니다. htaccess 편집에 새로운 브랜드입니다. if와 else의 선언을해야할까요? – MusicallyInspired

+0

다섯 번째 조건에 오타가 있습니다. 여기에는')'와'[NC]'사이에 공백이 없습니다. 삽입 해보십시오. – zx81

+0

+1 이것이 효과가 있습니다. @MusicallyInspired : 당신은 항상 500 오류가 발생하면 아파치 error.log를 확인해야합니다. – anubhava

관련 문제