【问题标题】:mod_rewrite rule for drupal works except homepage/root domaindrupal 的 mod_rewrite 规则,除了主页/根域
【发布时间】:2013-04-29 17:13:18
【问题描述】:

我有一个非常简单的重写规则,可以将移动代理从我们的 drupal 6 多站点重定向到我们的移动域

RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteCond %{HTTP_ACCEPT} text/vnd.wap.wml [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !(ipad|joojoo|tablet|hiton) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
# Param in URL to skip going to mobile site
RewriteCond %{QUERY_STRING} !mobile=1 [NC]
RewriteCond %{HTTP_USER_AGENT} \bagent1|agent2|agent3etc..\b [NC]
RewriteRule (.*) "http\:\/\/m\.domain\.com/" [R=301,L]

上面的一切都很好,除了主页,每当我转到 www.domain.com 或 domain.com 甚至 www.domain.com/ 时,我都不会被重定向。网站上的任何其他页面都可以正常工作。我尝试使用 rewritebase / 得到相同的结果。有什么建议么?

TIA

【问题讨论】:

  • 我不知道为什么,但问题是目录。我删除了 RewriteCond %{REQUEST_FILENAME} !-d 并且它可以工作,但它不能。很奇怪,因为默认的 drupal 规则紧随其后,而且确实有这个条件。
  • 但这就是我在 7 小时前的回答中所说的。不明白。

标签: drupal mod-rewrite


【解决方案1】:

上面的一切都很好,除了主页,每当我转到www.domain.comdomain.com甚至www.domain.com/

我猜您需要另一个不带 REQUEST_FILENAME 条件的规则,并且需要一个附加条件来确认 URI 路径为空。

由于条件仅对下一条规则有效,因此有必要对这条附加规则重复它们。您可以尝试在您的问题中插入这段代码:

# Conditions in the question
RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain\.com$
RewriteCond %{HTTP_ACCEPT} text/vnd.wap.wml [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !(ipad|joojoo|tablet|hiton) [NC]
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{QUERY_STRING} !mobile=1 [NC]
RewriteCond %{HTTP_USER_AGENT} \bagent1|agent2|agent3etc..\b [NC]

# New condition and rule
RewriteCond %{REQUEST_URI} ^/$       [NC]
RewriteRule ^   http://m.domain.com/ [R=301,L]

注意:您当前的规则可以改进,因为替换 URL 是纯文本字符串。像这样:

RewriteRule ^(.*) http://m.domain.com/ [R=301,L]

【讨论】:

  • 感谢 Faa,我最终走了那条路,当它仍然不起作用时,我只是复制了规则集,然后开始一一删除,直到它被目录条件证明(见上文)
  • 这正是我在回答中所指出的:“...没有 REQUEST_FILENAME 条件...”。 !-d 条件从规则中排除根目录。另一方面,您不能只从当前代码中删除该条件,您将遇到对现有目录的请求的问题。他们不会被排除在规则之外,并且您的网站会出现问题。这样做的方法如我的回答所示:添加代码块到您问题中的代码块。我所说的代码块是指我的答案中的整套规则(大约 11 行)。
【解决方案2】:

实现这一点的最佳方法是使用移动工具模块。它适用于所有人!

【讨论】:

    猜你喜欢
    • 2019-08-19
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2010-09-17
    相关资源
    最近更新 更多