Apache rewrite_mod:RewriteRule路径和查询字符串

时间:2010-05-10 13:44:55

标签: .htaccess mod-rewrite case-sensitive

我目前在index.php上有一个标准网络界面的网站,我在iphone.php制作了一个适合iPhone的版本。
两个页面都处理相同的参数。

当我手动转到.../iphone.php时,它可以正常工作,但我想在.../path/和{{1}上重写任何内容}如果.../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不匹配...

2 个答案:

答案 0 :(得分:1)

  1. RewriteCond仅适用于一条重写规则。
  2. 要匹配名称为.*的所有包含“mobile”的用户代理,应在^.+mobile.+$语句中使用0或更多字符。
  3. 默认情况下,
  4. RewriteRule不包含查询字符串 - [QSA]标志应包含查询字符串。
  5. RewriteRule使用正则表达式 - 您应该使用\.来逃避点。
  6. 如果没有另外指定,
  7. RewriteRule会自动保存查询字符串。
  8. <强>更新:

    完成 .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]
    

答案 1 :(得分:0)

怎么样

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]