2012-06-12 2 views
0

ОБНОВЛЕНИЕ:«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> 
+2

Я всегда указывал бы любой параметр, используемый в запросе. Это лучшая практика, просто. –

+0

Я всегда кодирую их. Я просто показываю это как пример. –

+1

, что вы можете попробовать, - установить вторую переменную GET со значением используемого протокола ex: mysite.com/?p=tosomesite.com&pro=http , а в коде вы добавите этот протокол в домен ... $ final_link = $ _GET ['pro']. ': //'.$ _GET [ 'р']; – HamZa

ответ

3

Так что это проблема на хосте. Я обращался к HostGator за помощью, и они сказали, что это проблема mod_security. Если у вас возникли проблемы с попыткой объяснить, попросите их запустить команду apachetail по указанной вами ссылке.

Эти ссылки могут помочь вам немного

http://forums.hostgator.com/mod-security-and-403-errors-t71394.html

http://www.codingforums.com/showthread.php?t=233958

http://www.codingforums.com/showthread.php?t=244525

+0

Эта проблема действительно заставляет меня сходить с ума, каждый раз, когда вы хотите создать пост с http в нем, вам нужно пойти в поддержку Hostgator и спросить каждый раз, чтобы добавить URL-адрес в белый список, это очень скучно. – Gino

0

У меня была аналогичная проблема с HostGator. Вы можете попросить свою техническую поддержку через живой чат, чтобы добавить в белый список ваше доменное имя, которое вы хотите поместить в строку запроса. Ресурсы, предоставленные Далтоном Тан, хороши, особенно для первого форума HG.

Смежные вопросы