【问题标题】:Multiple RewriteRule to one RewriteCond多个 RewriteRule 到一个 RewriteCond
【发布时间】:2014-10-20 15:24:53
【问题描述】:

另一方面,我有大约 400,000 个子域。综上所述,有些调用也操作子域级别,例如..

subdomain1.example.com/some_action/ 

应该只从域中执行的此类操作有 27 个。

Htaccess 文件我创建了一条规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?example.com
RewriteRule ^some_action1/?$ index.php?some_action1 [L] 

如果我添加这一行

RewriteRule ^some_action2/?$ index.php?some_action2 [L]

与 some_action3 等的工作方式不同。

我已经为每个动作分别添加了

RewriteCond %{HTTP_HOST} ^(www.)?example.com

你能以某种方式跳到和声吗?

【问题讨论】:

  • 我有大约 400,000 个子域:你是认真的吗?
  • 它是一个社交网络,每个用户配置文件都被视为一个子域,但只是从 htaccess 生成的。 RewriteCond %{HTTP_HOST} !=www.example.com RewriteCond %{HTTP_HOST} ^(www\.)?(.+).example.com$ RewriteRule ^/?$ index.php?action=example&mode=user_profil&login=%2 [L]
  • 有 4 种方法,这里列出stackoverflow.com/a/24276207/5064633

标签: apache .htaccess mod-rewrite


【解决方案1】:

每个RewriteCond 条件仅适用于紧随其后的RewriteRule。这意味着如果您有一堆规则,则必须复制条件。如果您出于某种原因真的不想这样做,您可以在所有规则的开头使用否定。这可能是也可能不是一个好的解决方案,因为它可能会影响您未来对规则进行更改的方式:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(www.)?example.com
RewriteRule ^ - [L]

RewriteRule ^some_action1/?$ index.php?some_action1 [L] 
RewriteRule ^some_action2/?$ index.php?some_action2 [L] 
RewriteRule ^some_action3/?$ index.php?some_action3 [L] 

etc...

因此,第一条规则检查主机是否为 example.com,并跳过所有内容。然后,您可以添加所有规则,而不必担心这种情况。

但是,如果您的“some_action”始终是 GET 参数的一部分,您也许可以只使用一条规则:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?example.com
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?$1 [L] 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2013-07-21
    • 1970-01-01
    • 2012-04-22
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多