我和mod_rewrite结合使用ColdFusion有一个奇怪的问题:
我在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]
除了一件事以外,一切都很好:
如果我致电http://www.example.com/test/?asdf
我的URL.original_url
读取此original_url=/test/index.php&asdf
,我无法弄清楚为什么会有索引。 php 。
我试过已经遗漏了PT-flag,但没有它就行不通。所有页面例如http://www.example.com/test/
返回403 - Forbidden
并在页面标题中显示“JRun Servlet Error”。
感谢您对此有任何想法!
修改
好的,我错过了一些重要的事情:文件夹/test/
实际上存在于我的文档中!其他网址如/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/
这是我预期的行为。