mod_rewrite добавляет REQUEST_URI к URL-параметру, обрабатывает его с помощью ColdFusion
У меня странная проблема с mod_rewrite в сочетании с ColdFusion:
Я использую следующие правила перезаписи в моей virtualhost-конфигурации:
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]
Все работает нормально, кроме одного:
Если я позвоню 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/
на самом деле существует в моем documentroot! Другие 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/
что является моим ожидаемым поведением.