5

我正在尝试在 Zend 站点的子目录中运行非 Zend php 应用程序。我想为 .htaccess 中的子目录 '/branches' 中的所有文件绕过 Zend 应用程序。到目前为止,我发现的解决方案都没有奏效。这是当前的 .htaccess 文件:

RewriteEngine on
RewriteBase /

# WWW Resolve
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteRule ^web/content/(.*)$ http://www.domain.com/$1 [R=301,L]

# Eliminate Trailing Slash
RewriteRule web/content/(.+)/$ http://www.domain.com/$1 [R=301,L]

# Route Requests
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

这甚至可以在 .htaccess 中完成吗?

4

2 回答 2

1

您目前拥有:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

这是没有意义的,因为您指定的基本上不对实际文件、目录和符号链接执行任何操作的 RewriteCond 将永远无法工作。这是因为,RewriteRule 后面紧跟规则将所有内容重写到 index.php。

如果您的意图是将所有不是对 index.php 文件真实目录的请求的请求,您应该有这样的内容:

RewriteCond %{REQUEST_FILENAME} -s
RewriteCond %{REQUEST_FILENAME} -l
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ index.php [NC,L]

要添加忽略的特殊情况,/branches只需添加一个条件,如下所示:

RewriteCond %{REQUEST_FILENAME} -s
RewriteCond %{REQUEST_FILENAME} -l
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME} !^branches/
RewriteRule ^.*$ index.php [NC,L]
于 2012-11-12T20:59:57.823 回答
1

我能够在不更改 .htaccess 的情况下解决这个问题,而只需将我的子目录放在“/content”中。

于 2012-11-12T23:54:53.443 回答