我正在将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/