2

本当に奇妙な問題があります

.htaccess をいじって、すべてのリクエストを /test/ フォルダーのインデックス ファイルにリダイレクトしようとしています。

私のサイトは、ローカルの htdocs フォルダー内のフォルダー /test/ にあります。現在、他のファイルは存在しません。

私が期待すること: 任意の URL にアクセスすると、(たとえば/test/category/one/) にリダイレクトされます。/test/index.php

どう なりますか404 Not Found

私の .htaccess は次のようになります。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /test/index.php?__route=$1 [L,QSA]

設定してみましたRewriteBase /test/

これは非常に簡単ですが、なぜ機能しないのですか?

別のフォルダーに Wordpress サイトがあり、カスタムの書き換えで問題なく動作します。

さらに、Wordpress の .htaccess コンテンツをテスト サイトにコピーし、書き換えベースと最後のルールを /test/ に置き換えました。

Wordpress の .htaccess: (同じサーバー上の別の WP インストールで動作します)

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

# END WordPress

私はこれにしばらく苦労しており、かなりの数のSO記事を助けなく読んでいます。

書き換えログ ファイルを作成しても、テスト サイトを参照しても何も表示されませんが、Wordpress サイトにアクセスするとかなりの数の行が書き込まれます。

Win64 マシンで XAMPP を実行しています。

どんな助けでも大歓迎です!=)

4

2 に答える 2

5

更新: また、.htaccess ファイルの行末が適切に設定されていることを確認してください。Apache は、改行 (\n) 文字を含まないものを詰まらせることがあります。

したがって、WordPress が行っていることを (あるレベルで) エミュレートしたいようです。同じことを行うソフトウェアを開発していたときに、このケースをどのように処理したかを次に示します。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /test
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]
RewriteRule ^.*$ /index.php [L]
</IfModule>

存在するファイル (つまり、-fまたは-dテスト パスのいずれか) については、変更せずに提供します。それ以外の場合は、着信リクエストを index.php にリダイレクトします。パスの一部は RewriteRule に含まれていないことに注意してください/test。これは、RewriteBase が開始元の場所に設定されているためです。したがって、あなたの例では、最終的には次のようになると思います。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /test
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]
RewriteRule ^(.*)$ /index.php?__route=$1 [L,QSA]
</IfModule>

FWIW、私は .htaccess の専門家ではありません。私は過去にこれがうまくいくことを発見しました。

また、共有ホスト (DreamHost など) を使用している場合は、デフォルトのエラー ドキュメントを許可するための適切なルールを設定する必要がある場合があります。一部の共有 Web ホストは、エラーの場合に単一のファイルを提供します (failed_auth.html はその一例です)。そのケースを除外していない場合、404 になる可能性があります。

于 2012-08-16T18:50:03.730 に答える
2

これでうまくいくはずです:

# Activate the rewrite module.
RewriteEngine On
# Ensure the requested URL is not a file.
RewriteCond %{REQUEST_FILENAME} !-f
# Ensure the requested URL is not a directory.
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?__route=$1 [L,QSA]
于 2012-08-16T19:13:26.533 に答える