0

mod_rewrite 与 ColdFusion 结合使用时有一个奇怪的问题:

我在我的虚拟主机配置中使用以下重写规则:

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 Servlet 错误”。

感谢您对此的任何想法!

编辑: 好的,我错过了一些重要的事情:该文件夹/test/实际上存在于我的 documentroot 中!/test/does_not_exist/其他类似的URL不受上述问题的影响。

总结:

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/这是我的预期行为。

4

0 回答 0