【问题标题】:Set htaccess php_value for url rewrited path only仅为 url 重写路径设置 htaccess php_value
【发布时间】:2013-05-29 09:46:02
【问题描述】:

我只想为特定的 url(重写)路径设置 php_value 标志。我正在使用 htaccess 来完成此操作。我使用的框架是CodeIgniter,所以只有一个htaccess文件,url路由由php处理。

只有网站的后端应该有php_value max_input_vars 3000。网址是http://www.example.com/admin/dashboard

我在 htaccess 文件中考虑过这个:

<Location /website.com/admin>
    php_value max_input_vars 20000
</Location>

【问题讨论】:

  • /admin 是一个真实的目录吗?
  • 这不是一个真正的目录。这本来很容易。
  • 好的,您可以升级到 Apache 2.3 版或更高版本吗?
  • 你认为你的系统架构是正确的,一个请求中有超过 3000 个输入变量?如果你这样做,那么 htaccess 应该这样做。 httpd.apache.org/docs/2.2/mod/core.html#directory注意,需要使用完整路径。
  • @igasparetto: /admin 并不是这里的目录。

标签: codeigniter .htaccess


【解决方案1】:

好的,因为您无法将 Apache 升级到最新版本,这是一种变通方法来实现此条件设置。

1 - 在DOCUMENT_ROOT 中运行此命令以创建index.php 的符号链接为__anything.php

ln -s index.php __anything.php

2 - 将新代码放在DOCUMENT_ROOT/.htaccess 中,就在RewriteEngine On 行的下方。你的整体.htaccess 看起来像这样:

# forward all URLs starting with /admin/ to __anything.php
RewriteRule ^(admin(?:/.*|))$ __anything.php?/$1 [L,NC]

# set max_input_vars to 2000 for file __anything.php
<FilesMatch "^__anything\.php">
    php_value max_input_vars 20000
</FilesMatch>

# your regular Codeignitor controller code
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

PS:我没有安装 CI,所以我不能用 CI 真正测试这个,但我测试了这个并得到了增强的max_input_vars 值。

【讨论】:

  • 你的想法给了我另一个想法。我在index.php 文件旁边创建了一个admin.php 文件,它需要index.php(我不确定是否可以创建符号链接)。我也对 htaccess 做了一个小的修改,比如this。非常感谢!
  • 这是完美的,如果你在 unix/linux 上,那么创建符号链接也是可能的。但我真的很高兴这一切都为你解决了。
  • 您好,如果我安装了 Apache 2.4.18,首选方式是什么?谢谢。
  • 这也适用于 Apache 2.4。您只需要 PHP 5.3.9 及更高版本。
【解决方案2】:

您可以使用以下代码,其中 admin 是您在 Codeigniter 中的控制器:

<FilesMatch "^(admin)">
    php_value max_input_vars 20000
</FilesMatch>

如果你想定位多个 CI 控制器,你可以用管道分隔它们:

<FilesMatch "^(admin|another)">
    php_value max_input_vars 20000
</FilesMatch>

这可能不是完成您正在寻找的事情的最佳方式,但它确实有效。我建议使用&lt;Location&gt;&lt;LocationMatch&gt;,这需要在您的服务器配置或虚拟主机中设置(因为您不能在.htaccess 中使用&lt;Location&gt;&lt;LocationMatch&gt;)。

一个例子是:

<Location /admin>
    php_value max_input_vars 20000
<Location>

【讨论】:

  • FilesMatch 不需要实际存在的文件吗?
  • 我仍然无法让它工作。 admin url 被重写为http://192.168.1.10/example.com/admin/statistics/costs_view。我试过/example.com/admin//admin//index.php/admin/ 和其他组合,它们不起作用。我在管理员和前端打印max_input_vars 这样var_dump(ini_get('max_input_vars'))
【解决方案3】:

如果在初始化管理控制器时尝试在 php 代码中硬编码设置值怎么办:

<?php
ini_set('max_input_vars', 2000);

如果服务器配置允许在运行时更改 ini,应该可以工作。

【讨论】:

猜你喜欢
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2021-12-10
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多