web-dev-qa-db-ja.com

mod_rewriteのURLの最大長は257文字ですか?

私の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の長さは任意の長さにすることができます。どうすればこの制限を克服できますか?

12
Daniel

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

File System Limits を見てください。ファイル名の最大長は255バイトであることがわかります。したがって、Apacheおよび/またはリライトルールがファイルの存在を確認すると、オペレーティングシステムによってエラーがApacheに返されます。

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

2つのオプションが表示されます。

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