ОБНОВЛЕНИЕ:«http: //» в строке запроса не работает
Я тестировал в субдомене - нет .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:/
Если есть a http://
или https://
или ftp://
в строке запроса, была бы ошибка, даже если бы я ее закодировал. У меня есть index.php
(сценарий ввода) и test.php
(для проверки этой ошибки). Если я нахожу URL-адрес (который проходит через index.php
) с http://
внутри строки запроса, переменная $_GET
будет пуста, даже если есть другие параметры. Если я нахожусь test.php?p=http://
, я бы перенаправил (без изменения URL-адреса) на index.php
с ошибкой (фреймворк обрабатывает недопустимые запросы). При замене http://
с чем-то еще, все работает нормально - test.php
показывает, что это означает, все остальные запросы отправляются в index.php
с $_GET
заселенными.
Я заметил эту ошибку только после перехода на новый хост (hostdime to 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>
Я всегда указывал бы любой параметр, используемый в запросе. Это лучшая практика, просто. –
Я всегда кодирую их. Я просто показываю это как пример. –
, что вы можете попробовать, - установить вторую переменную GET со значением используемого протокола ex: mysite.com/?p=tosomesite.com&pro=http , а в коде вы добавите этот протокол в домен ... $ final_link = $ _GET ['pro']. ': //'.$ _GET [ 'р']; – HamZa