11

ファイルを設定DirectorySlash Offし、末尾にスラッシュを付け.htaccessにディレクトリを呼び出すと、サーバーからが取得されます。スラッシュで呼び出すと、すべて正常に機能します。403-Forbidden

誰かが理由を説明できますか?これが私の完全に匿名化されたもの.htaccessです:

# GLOBAL CONFIG
Options +FollowSymlinks
DirectorySlash Off
AddDefaultCharset utf-8
php_value post_max_size 256M
php_value upload_max_filesize 256M

# BEGIN WordPress
RewriteEngine On
RewriteBase /folder/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /folder/index.php [L]
# END WordPress

# REMOVE WWW
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com$1 [R=301,L]
4

4 に答える 4

16

ドキュメントでご存知のように、DirectorySlashがに設定されている場合Off、リクエストは評価され/folderていません。DirectoryIndexこれは、リクエストがに自動的にマッピングされないことを意味し/folder/index.phpます。

mod_dirこのチェックは、要求処理の「修正」フェーズで実行されます。mod_rewrite定義を担当するRewriteRule、は、ファイルでルールを指定するときに、このフェーズでも処理を実行し .htaccessます。

ただし、のようなモジュールを認識してプログラムされてmod_dirおり、現在のディレクトリが末尾のスラッシュで要求されていることを確認するためのチェックが含まれています。そうでない場合は、未定義の動作につながる可能性があるため、リクエストの処理を拒否します。

次に、リクエストはコンテンツ生成フェーズに進みます。コンテンツ生成フェーズは、リクエストが実際のファイルにマップされていないため、によって処理されmod_autoindexます。Indexesこれがデフォルトでホストで無効になっている場合、表示される内容をmod_autoindex返します403 Forbidden

DirectoryIndexは評価されないため、リクエストを処理したとしても、mod_rewrite 自動解決が行われないため、失敗することに注意してindex.phpください。

RewriteRule . /folder/index.php [L]

は何かに一致する必要があるため、一致しません.(ただし、要求は空白になります)。

有効にすると、リクエストをとにかくマップするDirectorySlashという事実によって処理される最後のメモを除いて、前述のすべてのシナリオで防止されたアクションを修正することにより、このシナリオを防止します。DirectoryIndexindex.php

于 2010-07-17T21:59:54.693 に答える
10

Apache 2.4では、を設定することで.htaccessファイルの書き換えを許可できますRewriteOptions AllowNoSlash

 Changes with Apache 2.3.16
 ...
 *) mod_rewrite: Add the AllowNoSlash RewriteOption, which makes it possible
    for RewriteRules to be placed in .htaccess files that match the directory
    with no trailing slash. PR 48304.
    [Matthew Byng-Maddick <matthew byng-maddick bbc.co.uk>]
 ...

mod_rewriteのApacheドキュメントを参照してください

于 2012-02-23T08:47:22.750 に答える
2

DirectorySlashをオフにすると、URLの自動修正が無効になり、ディレクトリリストが表示されようとしますが、幸いなことに、これをどこか(またはファイルのアクセス許可)で無効にしているため、403-Forbiddenが送信されます。オンにすると正常に動作すると思います。私がドキュメントから理解していることから、セキュリティのためにDirectorySlashをオフに使用することはあまり良くありません。 http://httpd.apache.org/docs/2.1/mod/mod_dir.html

于 2010-07-15T19:15:44.043 に答える
0

トムがすでに答えたように、RewriteOptionsには特別なオプションがありますが、Apache 2.3.16以降のみです。したがって、私のように古いバージョンのapacheを使用している場合、apacheはそうではないため、同じディレクトリのURLを書き換えることはできません。このディレクトリについて知っています。

<Directory /var/www/html/public>例:「GET / somedir」はリライトログを指しますが、(!)アクセスログの要求されたファイル名(%f)は引き続き/var/www/html/public/somedir/-これはクレイジーなapacheロジックです。また、apacheは、503(オプション+インデックスなし)またはディレクトリリスト(それ以外の場合)のいずれかを、/ somedir /subdir/ではなく/subdir/などの間違ったURLで表示します。

だから、私は私にとって有効な解決策を1つだけ見つけました-エイリアスを使用する:

AliasMatch "/somedir$" "/var/www/html/public/somedir/index.html"

これが2020年以降に他の誰かに役立つことを願っています:D

于 2020-06-11T09:43:09.397 に答える