mod_rewriteのURL 257文字の最大長は?


11

私のURLスキームは/foo/var1-var2-var3.../barです

私はこれらのmod_rewriteルールを使用しています:

RewriteBase /foo/
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [PT,L]

文字列「var1-var2 ...」の長さが257文字を超える場合、エラー403 Forbiddenおよび404が返されます。ただし、「var1-var2 ...」文字列の長さが257文字以下で、その後にスラッシュが続く場合、残りのURLの長さは任意の長さになります。この制限をどのように克服しますか?

回答:


11

基礎となるファイルシステムの制限に直面しています。

見てみましょうファイルシステムの制限を。ほとんどのファイル名の最大長は255バイトです。したがって、apacheおよび/または書き換えルールがファイルが存在するかどうかをチェックすると、オペレーティングシステムによってエラーがapacheに返されます。

Apacheでは、このようなルールを.htaccessファイルに入れた場合、問題を回避するには遅すぎます。Apacheはすでに長いファイル名を統計しようとしたため、ファイルシステムエラー '(36)File name too long'がスローされ、403エラーが返されます。

次の2つのオプションがあります。

  1. アプリケーションのURL形式を各スラッシュ間の最大255文字に変更します。
  2. 書き換えルールをapache仮想ホスト設定に移動し、REQUEST_FILENAMEを削除します。

.htaccessファイルに{REQUEST_FILENAME}が含まれていないのに403が返される場合、これはまだ問題ですか?(serverfault.com/questions/140852/...
philfreo

1
書き換えルールをapache configに移動する必要があります。これが機能を保持し、問題を回避する唯一の方法です。
h0tw1r3

3
apacheのバーチャルホストの設定を.htaccessファイルからルールを移動するときは、変更する必要がある%{REQUEST_FILENAME}=> %{DOCUMENT_ROOT}%{REQUEST_FILENAME}などではない、ともあなたのURLパターンの先頭にスラッシュを追加しますRewriteRule ^abc ...けどRewriteRule ^/abc ...。mod_rewriteの単純さを愛する必要があります
...-ash108

2
「書き換えルールをapache仮想ホスト設定に移動する」部分は黄金色です。これは、私が試した他の多くの回避策とは異なり、適切に実装されたときに実際に機能します。
ash108
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.