は、ここに私の問題です: mod_rewriteをパスを指定せずにサブディレクトリに正しくリダイレクトする方法は?
はの私は、www.example.com
をウェブサイトを持っているとしましょう。私は、そのドメインのドキュメントルートのサブディレクトリにあるアプリケーション
subdir
を持っている:
/home/example/public_html/subdir/
subdir
この.htaccess
が含まれています
# Redirect trailing slash if not a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /subdir/$1 [L,R=301]
それは動作します。 http://www.example.com/subdir/not_a_directory/に行くと(明らかにnot_a_directory
はディレクトリではない)、私はhttp://www.example.com/subdir/not_a_directoryにリダイレクトされます。これは私が望むものです。
ただし、書き換えルールまたは.htaccess
のどこにでもsubdir
を指定する必要はありません。アプリケーションのパスを変更せずに何かを変更できるようにしたい。それは、(書き換えルールの相対パスは、絶対パスまたはに対し、ファイルシステムのパスを返すなぜ起こるか、私は一種の理解http://www.example.com/home/example/public_html/subdir/not_a_directory
:私は
# Redirect trailing slash if not a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]
...次のことを試してみました。しかし、私はにリダイレクトルート絶対パスはURLを返します)、私が探しているものを達成する方法を理解することはできません。
RewriteRule
にキャプチャグループを持つ方法はありませんか?パスの一部はsubdir
ですか?私もRewriteBase /
を設定しようとしましたが、何も変わらないようです。
書き換えルールが混乱するので、どんな助けでも大歓迎です。ありがとうございました!
はい、ありがとう!私は 'REQUEST_URI'に' subdir'が含まれていることに気付きましたが、私はRewriteCond内でキャプチャグループを使うことはできませんでした(あるいは、私ができることを忘れてしまった)。もう2つの質問:1.私は、 'RewriteRule/$'を 'RewriteRule ^'で置き換えることができると思います.2番目のRewriteCondは既にスラッシュで終わるURLのみを書き直します。 2.なぜNE(noescape)フラグ? – benface
はい 'RewriteRule ^'はここで完璧ですが、 'NE'はURLのいくつかの特殊文字がエンコードされるのを避けるためです。 – anubhava
「NE」が欲しくない場合はありますか? – benface