下面的 .htaccess 文件适用于各种托管网站,都在 apache 2.2 上运行,但云服务器上的测试环境和新网站在 apache 2.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 的 apache 2.4 000-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错误日志如下:
[Mon Jan 11 09:26:35.751982 2016] [core:notice] [pid 1812] AH00094: Command line: '/usr/sbin/apache2'
[Mon Jan 11 09:44:22.816423 2016] [:error] [pid 1892] [client 192.168.33.1:49762] PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0, referer: http://speechlink-primary.dev/infant/assessment/start/15
[client 192.168.33.1:49804] AH00687: Negotiation: discovered file(s) matching request: /vagrant/www/domainname/public_html/page-name (None could be negotiated).
最佳答案
从 apache 2.2 升级到 2.4 时可能会出现一些错误
有时,您可能会忘记在新服务器上启用使用的模块,这可以通过运行 apache 命令 a2enmod <module> 轻松解决。 ,您正在使用模块 rewrite在你的 .htaccess 中,这可以通过 a2enmod rewrite 激活.
在 apache 2.4 中,配置参数的名称发生了一些变化。
根据apache update notes , 更改了以下内容:
AllowOverride现在默认为 None .
参见 @Gal's answer有关此更改的更多信息。
虽然我怀疑可能是这种情况,但我还是将其包括在内,因为这对其他人来说可能是个问题。
通过制作 phpinfo() 文件检查 php 是否正确安装,该文件包含 <?PHP phpinfo()并且应该在运行时给出正确的 php 信息。
PHP 可以在 apache 上激活:a2enmod php5或 a2enmod php7
如果重写规则一直失败,快速测试可能会启用 rewrite rule logs ,这些可以使用默认的 apache“LogLevel”启用,以防止我们的整个 apache 发出调试消息,同时仍然从重写模块获取调试消息,您需要使用它的名称作为后者的前缀。例如:
LogLevel alert rewrite:trace3
这将打开到 trace3 的重写级别调试消息,您可以上升到 lvl trace8 .
rewrite 模块的调试信息可以这样解读:
[rewrite:trace2][rid#7f9c446360a0/initial] init rewrite engine with requested uri / - 这意味着重写引擎已经为一个 url 启动了
[rewrite:trace3][rid#7f9c446360a0/initial] applying pattern '^.*$' to uri '/' - 这意味着 RewriteRule工作了
[rewrite:trace4][rid#7f9c446360a0/initial] RewriteCond: input='/' pattern='^/?projects/old-projects/' => not-matched - 这意味着 RewriteCond没有匹配。
[rewrite:trace4][rid#7f9c446360a0/initial] RewriteCond: input='/' pattern='^/?' => matched - 这意味着 RewriteCond已匹配。
[rewrite:trace2][rid#7f9c446360a0/initial] rewrite '/' -> '/index.html' - RewriteRule 在内部/外部将您重定向到另一个页面
阅读调试日志文件的最佳方法是使用不换行的文本编辑器,例如 less -R在 Linux 上或 Windows 上的记事本上。
关于php - .htaccess for apache 2.2 不适用于 apache 2.4 vagrant development box,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34655032/
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
当我使用has_one时,它工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom
我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试
Ruby初学者努力简单地将这个@@people散列的值打印到控制台classPerson#haveafirst_nameandlast_nameattributewithpublicaccessorsattr_accessor:first_nameattr_accessor:last_name#haveaclassattributecalled`people`thatholdsanarrayofobjects@@people=[]#havean`initialize`methodtoinitializeeachinstancedefinitialize(first_name,last_
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:AmazonAPIlibraryforPython?我正在寻找一个AmazonAPI,它可以让我:按书名或作者查找书籍显示书籍封面获取有关每本书的信息(价格、评级、评论数、格式、页数等)Python或Ruby库都可以(我只想要最容易使用的库)。有什么建议么?我知道在SO上还有其他一些关于此的帖子,但这些API似乎很快就过时了。[几个月前我尝试了几个建议的Ruby库,但无法让它们中的任何一个工作。]
我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它
怎样说才是明智的呢?if@thing=="01"or"02"or"03"or"04"or"05"(数字包含在数据类型字符串的列中。) 最佳答案 制作数组并使用.include?if["01","02","03","04","05"].include?(@thing)如果值真的都是连续的,你可以使用像(1..5).include?这样的范围对于字符串,你可以使用:if("01".."05").include?(@thing) 关于ruby-优雅的链式'or'用于测试Ruby中的相同变量,我