Правило перезаписи htaccess не работает в мобильном браузере - PullRequest
0 голосов
/ 03 июля 2011

Я пытался создать мобильную версию своего сайта и перенаправлял пользователей с помощью файла htaccess.

Мой сайт использует правила перезаписи перед очисткой URL, что прекрасно работает. Когда я пытаюсь выполнить то же правило, но перенаправить на mobile.php вместо index.php, я получаю внутреннюю ошибку сервера 500.

Вот код:

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} #detect mobile browsers here...
RewriteRule ^([^/]*)[/]*([^/]*)$ /mobile.php?r=$1&id=$2 [L]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^/]*)[/]*([^/]*)$ /index.php?r=$1&id=$2 [L]

Кто-нибудь может увидеть мою проблему?

Ответы [ 2 ]

0 голосов
/ 04 июля 2011

Хотя я не уверен, в чем заключалась проблема с первым кодом, я выяснил, что делает то, чего я пытался достичь.

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/index.php$ [OR]
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^([^/]*)[/]*([^/]*)$ /mobile.php?r=$1&id=$2 [L]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^([^/]*)[/]*([^/]*)$ /mobile.php?r=$1&id=$2 [L]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^([^/]*)[/]*([^/]*)$ /index.php?r=$1&id=$2 [L]

Это хорошая практика?Я довольно новичок в этом (очевидно).

0 голосов
/ 03 июля 2011

Да - эта строка при публикации является недействительной по нескольким причинам:

RewriteCond %{HTTP_USER_AGENT} #detect mobile browsers here...
  1. Комментарий #detect mobile browsers here... может быть только первым непустым символом в строке- комментарий не может начинаться в середине строки.

  2. Из-за # 1 строка является неполной - в ней должна быть часть "Pattern Pattern", которая отсутствует (у вас естькомментарий вместо).См. документы для полного / правильного синтаксиса

  3. Вы можете войти в цикл переписывания в этом правиле (многие люди забывают, чтопосле того как mod_rewrite перезаписывает, он переходит к другой итерации, и если вы не вставите правильное дополнительное условие (RewriteCond), оно может зацикливаться вечно - фактически Apache прервет его после того, как достигнет предела, но точка останется).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...