Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php .htaccess for apache 2.2不';t在Apache2.4Vagrant开发盒上工作_Php_Apache_.htaccess - Fatal编程技术网

Php .htaccess for apache 2.2不';t在Apache2.4Vagrant开发盒上工作

Php .htaccess for apache 2.2不';t在Apache2.4Vagrant开发盒上工作,php,apache,.htaccess,Php,Apache,.htaccess,下面的.htaccess文件适用于各种托管网站,都在Apache2.2上,但测试环境和云服务器上的新网站都在Apache2.4上运行 问题是,除非添加完整的文件名(包括.php),否则对php文件的访问将不再有效,例如www.example.com/about.php,而不是www.example.com/about 非常感谢您对以下内容的任何帮助—理想情况下是使用可与2.2和2.4 apache一起使用的.htaccess Options -Indexes +multiviews Rewrit

下面的.htaccess文件适用于各种托管网站,都在Apache2.2上,但测试环境和云服务器上的新网站都在Apache2.4上运行

问题是,除非添加完整的文件名(包括.php),否则对php文件的访问将不再有效,例如
www.example.com/about.php
,而不是
www.example.com/about

非常感谢您对以下内容的任何帮助—理想情况下是使用可与2.2和2.4 apache一起使用的.htaccess

Options -Indexes +multiviews
RewriteEngine On
RewriteBase /

ErrorDocument 404 /404.php
#ErrorDocument 500 /500.php

# Add www.
RewriteCond %{HTTP_HOST} !^www\.
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Remove .php
#RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
#RewriteRule (.*)\.php$ $1 [R=301]

# remove index
RewriteRule (.*)/index$ $1/ [R=301]

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
---编辑---

下面是用于VirtualHost的Apache2.4000-default.conf

php_value auto_prepend_file /vagrant/www/fixdocroot.php

<VirtualHost *:80>
   ServerName dev.dev
   ServerAlias *.dev
   UseCanonicalName Off

   VirtualDocumentRoot "/vagrant/www/%-2+/public_html"

   <Directory /vagrant/www>
       AllowOverride All
       Require all granted
   </Directory>
</VirtualHost>

我正在调查你的问题,因为我的服务器上也有同样的问题

我找到了一个有效的解决方案。从Apache文档中:

服务请求时出错:

.htaccess文件未被处理-检查是否有适当的AllowOverride指令;在2.4中,默认值更改为“无”

这意味着的默认值已从
All
更改为
None

默认值:AllowOverride None(2.3.9及更高版本)、AllowOverride All(2.3.8及更早版本)

因此,要解决此问题,您需要更改
httpd.conf
文件(或
apache2.conf
),方法是将
AllowOverride All
添加到
目录
块中。它不会改变2.2上的任何行为,并且会在2.4上修复您的问题

您可以查看有关如何更改
目录
块以及如何在漂亮的小线程中添加
AllowOverride All
的更多信息


希望这对你有帮助

从Apache2.2升级到2.4时,可能会出现一些错误

忘记启用模块 有时,您可能会忘记启用新服务器上使用的模块,这可以通过运行apache命令
a2enmod
轻松解决,您正在使用模块
rewrite
。htaccess可通过
a2enmod rewrite
激活

您使用的配置参数将被重命名 在Apache2.4中,配置参数的名称有一些更改

根据报告,以下情况发生了变化:

AllowOverride
现在默认为
None

有关此更改的详细信息,请参阅

新服务器上可能未安装/启用PhP 虽然我怀疑这可能是真的,但我把它包括在内,因为这可能是其他人的问题


通过生成phpinfo()文件检查php是否正确安装,该文件包含
。htaccess文件的第一行似乎是问题所在:

Options -Indexes +multiviews
从:

多视图的效果如下:如果服务器接收到对/some/dir/foo的请求,如果/some/dir启用了多视图,并且/some/dir/foo不存在,则服务器读取目录以查找名为foo.*的文件,并有效地伪造一个类型映射来命名所有这些文件,为他们分配相同的媒体类型和内容编码,如果客户按姓名要求其中一个,则会有相同的媒体类型和内容编码。然后选择最符合客户需求的产品


我相信这会干扰重写规则-在我对Apache 2.4 vagrant box的测试中,从该行中删除
+多视图
似乎解决了问题。

可能是。htaccess已禁用,请检查Apache配置抱歉,没有启用,但谢谢!是忽略了.htaccess中的每一条语句,还是只忽略了一些语句?(例如,您的404页面工作吗?)此外,apache错误日志中是否有错误?.htaccess似乎正在运行,404重定向工作正常,问题似乎是apache 2.2和2.4之间对.php rewriteHi Gal的处理-不忽略您,但需要在周一开始工作时尝试。祝你周末愉快。嗨,姑娘,很抱歉配置已经有了你的建议。我已经发布了实际的apache.conf,以防您有其他想法。我认为这仍然是问题所在。您的目录标记是:
应该是
VirtualDocumentRoot应该处理这个问题。如果我添加每个域的实际文档根
/vagrant/www/eachdomain.com/publichtml
,那么除了文件名到文件名之外,所有重写都仍然有效。php只是经过了双重检查,重写已经启用,并且工作正常,就像php一样,对文件和重写的访问也是如此。问题很简单,如果只是主名称而没有扩展名,则无法正确加载php文件,例如
http://www.example.com/test
应该加载
test.php
@ferrybig如果这不起作用,什么都不会哈哈:)对不起,刚刚注意到编辑。会检查回来的很好-真是太棒了!必须回顾文档,看看为什么首先启用它
LogLevel alert rewrite:trace3
Options -Indexes +multiviews