Modrewriteルールにディレクトリvip
をスキップさせようとしています。以下に示すように、いくつかのことを試しましたが、役に立ちませんでした。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#RewriteRule ^vip$ - [PT]
RewriteRule ^vip/.$ - [PT]
#RewriteCond %{REQUEST_URI} !/vip
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Modrewriteで/vip/
ディレクトリを完全に無視して、すべての要求がフォルダーに直接渡されるようにするにはどうすればよいですか?
明確化のポイントとして:
これを他のルールの前に置いてみてください。
_RewriteRule ^vip - [L,NC]
_
vip
で始まるURIに一致します。
-
_は何もしないことを意味します。L
は、これが最後のルールであることを意味します。以下をすべて無視します。NC
は、大文字と小文字を区別しないことを意味します(「VIP」も一致します)。どんなものにも一致することに注意してくださいbeginningvip
。式_^vip$
_はvip
と一致しますが、_vip/
_または_vip/index.html
_とは一致しません。 _$
_はあなたの没落であったかもしれません。本当に正しくやりたい場合は、^vip(/|$)
を使用して、_vip-page.html
_と一致しないようにすることをお勧めします。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
これは、それが既存のファイルであるか、ディレクトリがそれに触れないことを示します。 site.com/vipにアクセスできる必要があり、書き換えルールは実行されません。
追加するコード、および書き換えルール/条件を提供するすべての回答は役に立ちません!デフォルトのWordPressコードは既に必要なことをすべて実行しています:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
これらの行は、「既存のファイル(-f
)またはディレクトリ(-d
)でない場合、WordPressに渡します。具体的または良好に関係なく、追加のルールを追加することは冗長です-すでにWordPressルール!
なぜ彼らは働いていないのですか?
vip
ディレクトリの.htaccess
はエラーをスローしています。ディレクトリをパスワードで保護してもまったく同じことが起こります。
解決策は次のとおりです。
ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt
WordPress=コードの前にこれらの行を挿入し、/ err.txtを作成します。これにより、WebDAV(またはパスワードで保護されたディレクトリ)にアクセスして失敗すると、そのファイルに移動します。そして、既存のデフォルトWordPress条件(RewriteCond %{REQUEST_FILENAME} !-f
)]に巻き込まれます。
あなたはすでにあなたが無視したいディレクトリに.htaccessファイルを持っていると言いました-あなたは使用することができます
RewriteEngine off
その.htaccessでmod_rewriteの使用を停止します(そのフォルダーでmod_rewriteを使用しているかどうかわからない場合は、オフにできないので役に立たないでしょう)。
コードのこの部分を置き換えてみてください:
RewriteRule ^ vip /.$-[PT]
...次のように:
RewriteCond%{REQUEST_URI}!(vip)[NC]
これで問題が解決するはずです。
RewriteCond %{REQUEST_URI} !^pilot/
それがその方法です。
wordpress=を使用して同じ問題が発生し、問題が401エラーと403エラーの適切なハンドラーを持たないことにリンクしていることがわかりました。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
これらの条件は、既存のフォルダーのURLを書き換えないように既に想定されていますが、パスワードで保護されたフォルダーに対しては機能しません。私の場合、ルート.htaccessに次の2行を追加すると問題が修正されました。
ErrorDocument 401 /misc/myerror.html
ErrorDocument 403 /misc/myerror.html
もちろん、/ misc/myerror.htmlを作成する必要があります。
これは動作します...
RewriteRule ^vip - [L,NC]
しかし、それが最初のルールであることを確認してください
RewriteEngine on
つまり.
ErrorDocument 404 /page-not-found.html
RewriteEngine on
RewriteRule ^vip - [L,NC]
AddType application/x-httpd-php .html .htm
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
etc
私の場合、brentonstrine(およびmatdumsaも同じ考えを持っていたことがわかります)による答えは正しいものでした...私は彼らの答えに投票したかったのですが、ここに新しいので、「評判」はないので、ここで本当の鍵だと思うことを強調するために、完全な答えを書かなければなりません。
これらの回答のいくつかは、WordPress index.phpの使用を正常に停止します...しかし、多くの場合、これを行う理由は、その中に実際のページを持つ実際のディレクトリがあることです直接表示したい
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
行はすでにそれを処理しているので、それらの解決策のほとんどは私のような場合には注意散漫です。
キーはbrentonstrine'sエラーが二次的な影響であるという洞察でした。これは、私が直接表示しようとしたディレクトリ内のパスワード保護が原因です。入れて
ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt
行とエラーページの作成(実際にerr401.htmlとerr403.htmlを作成し、より有益なエラーメッセージを作成しました)401 Authentication Requiredに表示するページが見つからなかった場合、生成された404応答を停止し、フォルダーが機能しました予想通り... Apacheログインダイアログを表示し、フォルダの内容を表示するか、失敗するとエラー401ページが表示されます。