2016-05-24 10 views
1

私はサブディレクトリがあるので、これを動作させるのに苦労していますexample.com/projectstestと誰かがexample.com/testと入力した場合、example.com/projects/testのファイルが表示されますが、ファイルが存在しない場合は404エラーが表示されます。ファイルが存在しない場合、サブディレクトリにhtaccessポイント要求があり、サブディレクトリの下にあります

さらに可能であれば私はいつでもexample.com/projects/testをしたいと思いますが、それは代わりにexample.com/testにリダイレクトします型付けされた誰かがちょうどprojects/に行く場合、私は彼らがそこに滞在することができるようにしたいました。

私は、このファイルが、それは

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ projects/$1 [PT] 
500内部サーバーエラーをスローする存在しない場合を除き、ほぼ完璧にファイルを通過した作品


これまでに、次の.htaccessファイルを試してみました

プロジェクトの下にファイルが存在していても、全く機能しない場合にのみ、このようなことが起こるかもしれないと思いました。

RewriteCond projects/%{REQUEST_FILENAME} -f 
RewriteCond projects/%{REQUEST_FILENAME} -d 
RewriteRule ^(.*)$ projects/$1 [PT] 

Iのみリダイレクトループを見つけるために、(上記のコードの前に置か)

RedirectMatch ^/projects/(.+)$ /$1 

をこの試み/projectsを剥離する/projects/testに行く何を指して第二の部分について。どうすればこれを防ぐことができますか?


参照のための私の現在の.htaccessファイル:

ErrorDocument 404  /404.html 

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] 
RewriteCond %{HTTP_HOST} ^example2\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.example2\.com$ 
RewriteRule ^/?$ "http\:\/\/example3\.org" [R=301,L] 

#RedirectMatch ^/projects/(.+)$ /$1 
#RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteCond %{REQUEST_FILENAME} !-d 
#RewriteRule ^(.*)$ projects/$1 [PT] 

答えて

1

あなたのルートの.htaccessにこれらのルールを使用することができます。

DirectoryIndex index.html 
RewriteEngine On 

RewriteCond %{THE_REQUEST} /projects/(\S+)\sH [NC] 
RewriteRule^/%1 [L,R=302,NE] 

RewriteCond %{DOCUMENT_ROOT}/projects/$1 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/projects/$1 -d 
RewriteRule ^(.+)$ projects/$1 [L] 
+0

これは私のために動作していないようです。すべてがルートディレクトリ(.htaccess)で実行されると、すべてがホームディレクトリにリダイレクトされ、もう何も動作しません。最初の部分をコメントアウトすると、(キャッシュされているかもしれない)いくつかのファイルのリダイレクトが機能しているように見えますが、そこにあるべきものに対しては404エラーが出ます。私は302の代わりに302のリダイレクトを使用しましたが、後で元に戻す能力以外の何かに影響を与えるべきではありません。 – zfb

+0

2つのURLを試してみましたが、2つのURLは別の書き換えルールで試してみましたが、試したURL(/ projectsの下のディレクトリです)で404エラーが発生しました。ちょうど404ページを渡しました。 'RewriteCond%{THE_REQUEST}/projects /(\ S *)\ sH [NC]'ビットを使って、ホームページを表示するだけでexample.comにリダイレクトされたeven/asdfasを指摘しました。私は元の質問に.htaccessを追加しました。今のように – zfb

+0

ああ、何が起こったのか分かります。はい、それはちょっと動作しますが、私がむしろやっていないファイルを宣言する必要があります。だから私は 'example.com/projects/test/index.html'を持っています。もし私がちょうどそのようにタイプすれば、私は' example.com/projects/test/'とタイプすれば404です。それは他の方法で行うことができますか? – zfb

関連する問題