2016-12-05 6 views
0

http://test.server/を私の現在のWebサーバーとして試してみると、ホームページのコードを保持するHomepageというフォルダがあります。 Homepageフォルダには、のようないくつかのフォルダがあり、ファイルには.htaccessのファイルがあり、deny from allです。 Homepageで、私は以下の内容と同様、非常に長い.htaccessを持っています:予期しない要求処理が既存のフォルダの部分文字列で行われました

<IfModule mod_speling.c> 
    CheckSpelling off 
    CheckCaseOnly off 
</IfModule> 

Options -MultiViews 

RewriteEngine On 
RewriteBase /Homepage 
ErrorDocument 403 /Homepage/403 
ErrorDocument 404 /Homepage/404 

# Block direct access to files and directories in these directories 
RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|bmp|png|tiff|css|js|ico)$ [NC] 
RewriteCond %{REQUEST_FILENAME} -d [OR] 
RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^(Forbidden) - [NC,F] 

# Deny access to configuration files 
<Files ~ "\.ini"> 
    Order allow,deny 
    Deny from all 
</Files> 

# Remove index.php 
RewriteCond %{THE_REQUEST} /index\.php [NC] 
RewriteRule ^(.*?)index\.php$ /$1 [L,R=301,NC,NE] 

# Redirect Trailing Slashes 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ /$1 [L,R=301] 

# Handle Front Controller 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?page=$1&id=$2 [L,QSA,NC] 
RewriteRule ^([\w-]+)?/?$ index.php?page=$1 [L,NC,QSA] 

は、私がアクセスhttp://test.server/Homepage/Templates/にしようとすると、これは403エラーを呼び出し、/Homepage/403で説明指定ErrorDocumentが適切に示され(と私によって解析されますバックエンド)であり、まだhttp://test.server/Homepage/Templates/にあります。私はhttp://test.server/Homepage/Template/http://test.server/Homepage/Temp/のような保護されたフォルダのサブがされているURLにアクセスしよう

しかしは、サーバ等http://test.server/Template/またはhttp://test.server/Temp/を(!)リダイレクトしていなかった一般的な404ドキュメントを示し私が.htaccessをルートフォルダに持っていないので、セットアップが必要です。私は、例えばhttp://test.server/Homepage/Temp/にある間、403が正しく動作するように、404のためのErrorDocumentが表示されることを期待していました。これは、私のindex.phpのハンドラに送信されることさえありませんが、ルートフォルダにいくつかのフォールバックルールを見つけることを試みていると思われるApacheによって直接処理されることを意味します。

私が行った間違いは何ですか?.htaccess

答えて

1

この問題の原因は# Redirect Trailing Slashesです。

あなたはとそのルールを置き換えることができます。

# Redirect Trailing Slashes 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^(.*)/$ 
RewriteRule^%1 [L,R=301,NE] 

は、この変更をテストする前にブラウザのキャッシュをクリアします。

+0

これは意図したとおりに動作しているようですが、本当にありがとうございます。実際に私をこの時に書いたのはあなたです。http://stackoverflow.com/a/33220616/796036 –

+0

実際に私はチェックしましたその答えも。その答えは、.htaccessがルートにある場合のものですが、ここでは '/ Homepage /'にあります。とにかく私が提案したこの新しいルールは、.htaccess – anubhava

関連する問題