我正在将Apache 2.4与mod_rewrite一起使用,但有一个我无法解决的问题。

我有一个.htaccess文件,其中包含

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    ... RewriteRules ...
</IfModule>


这很好。现在,我需要执行以下操作:如果有人以http://my.web.page.com的身份访问我的网站,则如上例所示,我需要RewriteBase /。但是,如果有人以http://192.168.1.10/xyz的身份访问网站,则我需要RewriteBase /xyz

我想我可以使用<If expression>...</If>来实现此目的,但是我无法正确编写该表达式。

xyz是固定字符串。它不必从URL复制,但可以在RewriteBase /xyz命令中进行硬编码。

我怎样才能做到这一点?

编辑

@anubhava提出了一个表达式,我无法使用。所以我尝试了一些非常简单的<If...>语句,这些语句仅使用RewriteBase /语句。

我现在非常非常困惑。

尝试1

RewriteEngine On
RewriteBase /

<If "false">
  RewriteBase /
</If>


这可行。到目前为止,一切都很好。现在让我们启用条件:

尝试2

RewriteEngine On
RewriteBase /

<If "true">
  RewriteBase /
</If>


这是行不通的。因此启用条件会有所不同。可能这两个RewriteBase语句导致代码失败。

尝试3

RewriteEngine On

<If "true">
  RewriteBase /
</If>


不,这仍然行不通。也许仅仅是条件的存在才是问题吗?

尝试4

RewriteEngine On
RewriteBase /

<If "true">
  #RewriteBase /
</If>


这可行。因此,条件本身是无害的。我只是不能在其中写RewriteBase

为了完整起见,我正在使用的重写规则是:

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


Apache错误日志不包含任何错误信息。

第二编辑

根据@anubhava的建议,我设法使它起作用:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# case 1
RewriteCond %{HTTP_HOST} =my.web.page.com
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

# case 2
RewriteCond %{HTTP_HOST} ^192\.168\.
RewriteRule ^(.*)$ xyz/index.php?/$1 [L,QSA]

最佳答案

根据您编辑的问题,以下规则应适用:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

# case 1
RewriteCond %{HTTP_HOST} =my.web.page.com
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

# case 2
RewriteCond %{HTTP_HOST} ^192\.168\.
RewriteRule ^(.*)$ xyz/index.php?/$1 [L,QSA]

关于apache - 条件重写库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33281125/

10-11 02:40