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/ что является моим ожидаемым поведением.

0 ответов

Другие вопросы по тегам