更新:
我在子域中测试过 - 没有.htaccess和PHP。
我创建了index.html
并尝试访问/?p=http:/
和/?p=http://
。
我为/?p=http://
Forbidden
You don't have permission to access / on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Apache Server at test.example.com Port 80
这排除了任何PHP或mod_rewrite问题。 Apache有什么问题?
案例1(不起作用): mysite.com?p=http://
案例2(有效): mysite.com?p=http:/
如果查询字符串中有http://
或https://
或ftp://
,则会出现错误,即使我对其进行了编码也是如此。
我有index.php
(条目脚本)和test.php
(用于测试此错误)。如果我在查询字符串中访问带有index.php
的网址(通过http://
),即使有其他参数,$_GET
变量也会为空。如果我访问test.php?p=http://
,我会被重定向(没有更改URL)到index.php
并出现错误(框架处理无效请求)。在用其他内容替换http://
后,一切正常 - test.php
显示其意图,所有其他请求都会index.php
填充$_GET
。
我转移到新主机(hostdime到hostgator)后才注意到这个错误。我无法在其他任何地方重现这一点(旧主机,本地服务器)。
谢谢。
我的.htaccess文件,删除了一些不相关的代码。
# Use PHP 5.3
AddType application/x-httpd-php53 .php
# ----------------------------------------------------------------------
# Start rewrite engine
# ----------------------------------------------------------------------
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
# removes www.
# ------------------------------------------------------------------
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
# rewrite "domain.com/foo -> domain.com/foo/"
# ------------------------------------------------------------------
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
RewriteRule ^(.*)$ /$1/ [R=301,L]
# Yii specific rewrite
# ------------------------------------------------------------------
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
</IfModule>
# without -MultiViews, Apache will give a 404 for a rewrite if a folder of the same name does not exist
# ------------------------------------------------------------------
Options -MultiViews
# ----------------------------------------------------------------------
# UTF-8 encoding
# ----------------------------------------------------------------------
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset utf-8
# Force UTF-8 for a number of file formats
AddCharset utf-8 .html .css .js .xml .json .rss .atom
# ----------------------------------------------------------------------
# Gzip compression
# ----------------------------------------------------------------------
<IfModule mod_deflate.c>
...
</IfModule>
<IfModule mod_expires.c>
...
</IfModule>
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
# Block access to "hidden" directories whose names begin with a period. This
# includes directories used by version control systems such as Subversion or Git.
<IfModule mod_rewrite.c>
RewriteCond %{SCRIPT_FILENAME} -d
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)\." - [F]
</IfModule>
# Increase cookie security
<IfModule php5_module>
php_value session.cookie_httponly true
</IfModule>
答案 0 :(得分:3)
这显然是主机上的问题。我联系了HostGator寻求帮助,他们说这是一个mod_security问题。 如果您在尝试解释时遇到问题,请告诉他们在您提供的链接上运行apachetail命令。
这些链接可能对您有所帮助
http://forums.hostgator.com/mod-security-and-403-errors-t71394.html
答案 1 :(得分:0)
我与HostGator有类似的问题。您可以通过在线聊天询问他们的技术支持,将您希望将URL放在查询字符串中的域名列入白名单。 Dalton Tan提供的资源非常适合阅读,特别是HG论坛的第一个。