Php .htaccess for apache 2.2不';t在Apache2.4Vagrant开发盒上工作
下面的.htaccess文件适用于各种托管网站,都在Apache2.2上,但测试环境和云服务器上的新网站都在Apache2.4上运行 问题是,除非添加完整的文件名(包括.php),否则对php文件的访问将不再有效,例如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
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