Apache rewrite_mod: путь RewriteRule и строка запроса - PullRequest
0 голосов
/ 10 мая 2010

У меня в настоящее время есть веб-сайт со стандартным веб-интерфейсом на index.php, и я сделал версию для iPhone iphone.php.
Обе страницы обрабатывают одни и те же аргументы.

Работает нормально, когда я вручную перехожу на .../iphone.php, но я бы хотел переписать что-нибудь на .../path/ и .../path/index.php на iphone.php, если %{HTTP_USER_AGENT} содержит mobile и, при желании, добавить строку запроса (не уверен, если / когда мне нужно будет добавить ее).

Пока это то, что у меня есть в моем .../path/.htaccess:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.+mobile.+$ [NC]
RewriteRule index.php?(.*) iphone.php?$1 [L]
RewriteRule index.php      iphone.php [L]

Проблема в том, что она соответствует index.php в любой подпапке и не соответствует .../path/?args

Ответы [ 2 ]

1 голос
/ 10 мая 2010
  1. RewriteCond применяется только к одному правилу перезаписи.
  2. Чтобы сопоставить все пользовательские агенты, содержащие в своем имени «mobile» .* - 0 или более в выражении ^.+mobile.+$ должен использоваться любой символ.
  3. RewriteRule по умолчанию не содержит строку запроса - для включения строки запроса следует использовать флаг [QSA].
  4. RewriteRule использует регулярное выражение - вы должны использовать \. для экранирования точек.
  5. RewriteRule автоматически сохраняет ту же строку запроса, если не указано другое.

ОБНОВЛЕНИЕ:

Завершено .htacess :

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} ^.*mobile.*$ [NC]
RewriteRule ^(.*)index\.php $1iphone.php [L]

RewriteCond %{HTTP_USER_AGENT} ^.*mobile.*$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ $1iphone.php [L]
0 голосов
/ 10 мая 2010

Как насчет

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*mobile.*$ [NC]
RewriteRule /path/index.php /path/iphone.php [QSA,L]

РЕДАКТИРОВАТЬ: QSA Query string append, поэтому вам не нужно обрабатывать это по-другому. Если вы хотите, вы можете добавить дополнительный параметр, например:

RewriteRule /path/index.php /path/iphone.php?extra=param [QSA,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...