ColdFusion と組み合わせた mod_rewrite には奇妙な問題があります。
virtualhost-configuration で次の書き換えルールを使用しています。
RewriteEngine On
RewriteRule ^$ index.cfm [L]
# Add trailing slash if missing
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(?i)^[\\/]CFFileServlet
RewriteCond %{REQUEST_URI} !index.cfm
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L,R=301]
# Clean up multiple slashes in URL
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ [OR]
RewriteCond %{THE_REQUEST} ^[A-Z]+\s(.*/)/+\sHTTP/[0-9.]+$
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L]
# Pass all non physically existing files/folders to index.cfm in URL.original_url
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/cms/
RewriteRule ^(.*)$ /index.cfm?original_url=$1 [QSA,PT,L]
1つのことを除いて、すべてが正常に機能しています:
http://www.example.com/test/?asdf
このようにURL.original_url
読み取りを呼び出した場合、original_url=/test/index.php&asdf
インデックスがある理由がわかりません。phpが入っています。
私はすでに PT フラグを省略しようとしましたが、それなしでは機能しません。たとえば、すべてのページがhttp://www.example.com/test/
返さ403 - Forbidden
れ、ページのタイトルに「JRun サーブレット エラー」と表示されます。
これについてのアイデアをありがとう!
編集:
わかりました、重要なことを見逃していました:フォルダー/test/
は実際に私のドキュメントルートに存在します! のような他の URL/test/does_not_exist/
は、説明されている問題の影響を受けません。
要約する:
http://www.example.com/test/
->URL.original_url
取得/test/index.php
http://www.example.com/test/does_not_exist/
->期待される動作をURL.original_url
取得します。/test/does_not_exist/