php_value和php_flag在.htaccess中抛出错误

时间:2014-05-24 06:31:18

标签: php .htaccess

我刚刚移动了网络主机,我的.htaccess中出现了关于php_flag和php_value未定义的错误。它在其他主机上运行良好。

这就是我的.htaccess的样子:

php_value display_errors On
php_flag magic_quotes 1
php_flag magic_quotes_gpc 1
php_value mbstring.http_input auto
php_value date.timezone America/Los_Angeles

整件事:

php_value display_errors On
php_flag magic_quotes 1
php_flag magic_quotes_gpc 1
php_value mbstring.http_input auto
php_value date.timezone America/Los_Angeles
# Do not remove this line, otherwise mod_rewrite rules will stop working
RewriteBase /
RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ $1\.php
DirectorySlash Off
# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]

Options -Indexes

这里出了什么问题以及如何解决?

1 个答案:

答案 0 :(得分:1)

您的新主机在CGI / FCGI /其他SAPI模式下运行PHP。仅当PHP作为apache模块运行时,才支持在.htaccess文件中设置PHP选项。因此,新服务器会引发内部错误。

对于较旧的PHP版本,您可以使用htscanner PECL包,对于PHP 5.3,您可以使用user.ini.files(这绝对是首选)。

对于以前的htscanner解决方案,将.htaccess文件中的php相关行包装在

<IfModule mod_php5.c>
  php_value ...
  php_flag ...
</IfModule>

对于后一个新的.user.ini解决方案,在项目的根目录中创建一个文件.user.ini,插入

display_errors=On
magic_quotes=On
magic_quotes_gpc=On
mbstring.http_input="auto"
date.timezone="America/Los_Angeles"

并从.htaccess文件中删除相应的行。

安全和弃用

在生产环境中将

display_error设置为on并不是一个好主意。同时,magic_quotes是一个不赞成使用的功能。如果可以,您应该重写脚本。如果您使用的是更新版本的PHP(如5.4),则此功能甚至不再可用。