74

modrewrite ルールに directory をスキップさせようとしています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/ディレクトリを完全に無視して、すべてのリクエストが直接フォルダに渡されるようにするにはどうすればよいですか?

アップデート:

明確にするポイントとして:

  • ドリームホストでホストされています
  • フォルダーはwordpressディレクトリ内にあります
  • /vip/ フォルダーには webdav .htaccess などが含まれています (これは重要ではないと思いますが)
4

11 に答える 11

135

これを他のルールの前に置いてみてください。

RewriteRule ^vip - [L,NC] 

任意の URI の先頭に一致しますvip

  • -手段は何もしません。
  • これLが最後のルールであることを意味します。以下のすべてを無視します。
  • は大文字と小文字を区別しないことを意味します(NCつまり、「VIP」も一致します)。

で始まる ものすべてに一致することに注意してくださいvip。式^vip$は一致しますが、 orには一致vipしません。それはあなたの没落だったかもしれません。あなたが本当にそれを正しくしたいのなら、あなたは一緒に行きたいと思うかもしれませんので、あなたは一致しませんvip/vip/index.html$^vip(/|$)vip-page.html

于 2008-10-02T17:22:50.110 に答える
14
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

これは、それが既存のファイルまたはディレクトリである場合は、それに触れないでください。site.com/vip にアクセスできる必要があり、書き換えルールは発生しません。

于 2008-11-07T21:32:06.527 に答える
10

追加しているコード、および書き換えルール/条件を提供しているすべての回答は役に立ちません! デフォルトの WordPress コードは、必要なすべてのことをすでに行っています。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

これらの行は、「既存のファイル ( -f) またはディレクトリ ( -d) でない場合は、WordPress に渡します。追加のルールを追加することは、それらがどれほど具体的で優れていても冗長です。WordPress ルールで既にカバーされているはずです!

では、なぜ彼らは働いていないのですか?

.htaccessディレクトリ内のがvipエラーをスローしています。ディレクトリをパスワードで保護すると、まったく同じことが起こります。

解決策は次のとおりです。

ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt

これらの行を WordPress コードの前に挿入し、/err.txt を作成します。このように、WebDAV (またはパスワードで保護されたディレクトリ) に到達して失敗すると、そのファイルに移動し、既存のデフォルトの WordPress 条件 ( RewriteCond %{REQUEST_FILENAME} !-f) によって捕捉されます。

于 2013-08-09T23:27:45.553 に答える
9

要約すると、最終的な解決策は次のとおりです。

ErrorDocument 401 /misc/myerror.html
ErrorDocument 403 /misc/myerror.html

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

この問題の原因について、Dreamhost 上の Wordpress と WebDAV を含む、私の特定の状況での詳細を投稿しまし

于 2010-08-08T17:35:33.660 に答える
8

無視したいディレクトリに.htaccessファイルが既にあるとおっしゃいました-使用できます

RewriteEngine off

その .htaccess で mod_rewrite の使用を停止します (そのフォルダーで mod_rewrite を使用しているかどうかは不明です。使用している場合は、オフにできないため役に立ちません)。

于 2008-10-02T18:31:22.550 に答える
7

コードのこの部分を置き換えてみてください。

RewriteRule ^vip/.$ - [PT]

...次のように:

RewriteCond %{REQUEST_URI} !(vip) [NC]

これで問題が解決するはずです。

于 2013-06-11T06:55:12.627 に答える
4
RewriteCond %{REQUEST_URI} !^pilot/ 

その方法です。

于 2012-11-29T20:03:35.100 に答える
3

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 を作成する必要があります。

于 2010-04-19T01:31:12.110 に答える
3

私の場合、ブレントンストリンによる答え(そして、マダムサも同じ考えを持っていたことがわかります)は正しいものでした...私は彼らの答えに賛成票を投じたかったのですが、ここでは新しいので、「評判」がないので、ここで本当の鍵だと思うことを強調するために、完全な答えを書くこと。

これらの回答のいくつかは、WordPress の index.php が使用されないようにすることに成功していますが、多くの場合、これを行う理由は、直接表示したい実際のページを含む実際のディレクトリがあり、

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

行はすでにそれを処理しているため、これらのソリューションのほとんどは、私のようなケースでは気を散らすものです.

重要なのは、エラーが二次的な影響であり、直接表示しようとしていたディレクトリ内のパスワード保護が原因であるというbrentonstrine の洞察でした。入れることで、

ErrorDocument 401 /err.txt
ErrorDocument 403 /err.txt

行とエラーページの作成(実際​​にはerr401.htmlとerr403.htmlを作成し、より有益なエラーメッセージを作成しました)401認証が必要で表示するページが見つからなかったときに生成される404応答を停止し、フォルダーが機能しました予想どおり... Apacheログインダイアログを表示し、次にフォルダーの内容を表示するか、失敗するとエラー401ページが表示されます。

于 2014-10-21T23:02:51.727 に答える
3

これは機能します...

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
于 2011-02-27T22:51:08.320 に答える
-1

私があなたの目的を理解しているかどうかはわかりませんが、次のことがあなたが求めていることをするかもしれませんか?

RewriteRule ^/vip/(.*)$   /$1?%{QUERY_STRING} [L]

これにより、 http://www.example.com/vip/fred.htmlなどのURLが/vipなしで書き換えられます。

于 2008-10-02T16:49:44.713 に答える