php $ SERVER ['PATH_INFO'] и apache mod_rewrite - PullRequest
3 голосов
/ 14 декабря 2011

Здесь у меня есть файл .htaccess с:

Options +FollowSymLinks

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php [QSA,L]

И перезапись работает, но в моем index.php нет path_info, когда я пытаюсь http://site.com/example.

У меня есть красная тема https://stackoverflow.com/questions/1442854/codeigniter-problem-with-mod-rewrite-on-apache-1-3, но это не решило мою проблему.

Итак, эта проблема возникает только на Apache 1.3 (на 2.0 все в порядке), и яхочу знать почему.У меня тоже, к сожалению, нет доступа к httpd.conf (

Пожалуйста, помогите мне.

Ответы [ 3 ]

3 голосов
/ 14 декабря 2011

Попробуйте изменить правило перезаписи на:

RewriteRule (.*) index.php [QSA,L,E=PATH_INFO:/$1]
1 голос
/ 02 февраля 2012

Это связано с mod_negotiation и возможностью доступа к /index.php как /index (без расширения).

Решение:

a2dismod negotiation

service apache2 restart
0 голосов
/ 14 декабря 2011

PATH_INFO - это суффикс виртуального пути после реального имени исполняемого файла CGI / PHP-скрипта.
Вам необходимо передать один, чтобы увидеть его:

RewriteRule (.*) index.php/$1 [QSA,L]

Примечаниечто вам также может потребоваться сначала включить эту опцию: http://httpd.apache.org/docs/2.2/mod/core.html#acceptpathinfo

AcceptPathInfo On

А затем, в зависимости от PHP SAPI, вам может потребоваться настроить php.ini в соответствии с настройкой --cgi-force-redirect (котораяпредназначен для исключения эксплойтов PATH_INFO для некоторых установок).http://php.net/manual/en/security.cgi-bin.php

...