php $SERVER['PATH_INFO'] и apache mod_rewrite
Здесь у меня есть файл.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://stackru.com/questions/1442854/codeigniter-problem-with-mod-rewrite-on-apache-1-3 но это не решило мою проблему.
Итак, эта проблема возникает только на Apache 1.3 (на 2.0 все в порядке), и я хочу знать, почему. У меня тоже к сожалению нет доступа к httpd.conf (
Пожалуйста, помогите мне.
3 ответа
Попробуйте изменить правило перезаписи на:
RewriteRule (.*) index.php [QSA,L,E=PATH_INFO:/$1]
Это связано с mod_negotiation
и возможность доступа /index.php
как /index
(без расширения).
Решение:
a2dismod negotiation
service apache2 restart
PATH_INFO
является суффиксом виртуального пути после имени реального исполняемого файла CGI / PHP-скрипта
Вам нужно пройти один, чтобы увидеть это:
RewriteRule (.*) index.php/$1 [QSA,L]
Обратите внимание, что вам также может потребоваться сначала включить этот параметр: http://httpd.apache.org/docs/2.2/mod/core.html
AcceptPathInfo On
И затем, в зависимости от PHP SAPI, вам, возможно, придется настроить php.ini относительно --cgi-force-redirect
настройка (которая предназначена для отказа от эксплойтов PATH_INFO для некоторых установок). http://php.net/manual/en/security.cgi-bin.php