5

Zendサイトのサブディレクトリ内で非Zendphpアプリケーションを実行しようとしています。.htaccessのサブディレクトリ「/branchs」内のすべてのファイルに対して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ような条件を1つ追加するだけです。

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 に答える