Linux CentOS 7 - 通过 .htaccess 配置 httpd.conf 文件

Posted

技术标签:

【中文标题】Linux CentOS 7 - 通过 .htaccess 配置 httpd.conf 文件【英文标题】:Linux CentOS 7 - Configuration of httpd.conf file through .htaccess 【发布时间】:2018-08-05 16:51:43 【问题描述】:

    我需要通过.htaccess 中的Linux CentOS 7 配置我的info.php 文件不显示扩展名。也就是说,调用http://server address/info 而不是调用http://server address/info.php

    另外,在.htaccess 中,添加phpinformation 重定向到info。即http://server address/phpinformation 重定向到http://server address/info

我关注了下面article的部分。

httpd.conf文件中,我把AllowOverride none改成了AllowOverride AuthConfig

接下来的步骤是什么?

【问题讨论】:

【参考方案1】:

要重写您的文件,您应该覆盖 FileInfo 类型的指令,而不是 AuthConfig 类型的指令(参见 https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride 以获取参考)

在 apache 配置中启用 mod_rewrite 模块 并在 .htaccess 文件中使用类似的配置:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^phpinformation$ info.php [L]
    RewriteRule ^info$ info.php [L]
</IfModule>

更通用的配置:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^phpinformation$ info.php [L]

    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteRule ^(.*)$ $1.php [L]
</IfModule>

第一个重写规则是相同的,如果您必须使用仅包含 phpinformation 的 url 提供请求,请将其重写为 info.php 并提供该 url。 L 修饰符意味着重写器不需要搜索额外的重写,可以只要求 apache 服务于生成的 (info.php) 规则。

第二条规则有点不同,重写引擎只有在满足所有前面的条件时才会执行重写。在这种情况下,原始 url 不会解析为现有文件 (!-f) 或目录 (!-d)。 如果文件/目录存在,它将照常提供

您可能还希望执行外部重定向以强制客户端访问资源的官方 url,在这种情况下,第一个示例可以进行类似的更改:

RedirectMatch ^/phpinformation$ /info
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^info$ info.php [L]
</IfModule>

为什么不对两个 url 使用 RedirectMatch?原因是客户端用户在浏览器上看到了重定向的 url,因此我们需要去掉的 .php 后缀会再次弹出。

参考文献

Mod_rewrite documentationAllowOverride documentationRedirectMatch documentation

【讨论】:

不工作是相当模糊的:-)?您是否在 Apache 中启用了 mod_rewrite,您是否使用 AllowOverride FileInfo 配置了目录?至少第一个重写规则很简单,肯定应该匹配。 我刚刚在最新的 Rewrite 中发现了一个错误并已修复,请重试。第一条规则 http://yourserver/phpinformation 必须起作用 我对问题 1 做了以下操作(我还在研究如何做问题 2): 在 httpd.conf 文件中,我设置了 AllowOverride All。在 .htaccess 文件中,我编写了以下内容:RewriteEngine On RewriteRule ^info$ info.php [NC]。参考:digitalocean.com/community/tutorials/… 您的规则配置工作正常,谢谢。但是下面的 sn-p 也可以工作:RewriteEngine On RewriteRule ^info$ info.php [NC] RewriteRule ^phpinformation$ info.php [L]。 [L] 在 RewriteRule ^phpinformation$ info.php [L] 行中代表什么? 这意味着重写是在提供 url 之前应用的最后一个。没有它,重写引擎会继续尝试使用 [L]ed 之后的条件和规则重写 url。

以上是关于Linux CentOS 7 - 通过 .htaccess 配置 httpd.conf 文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux CentOS 7 - 通过 .htaccess 配置 httpd.conf 文件

centos 7 通过dd 转换 linux 系统 为虚拟机

Linux CentOS 7 PostgreSQL 9.5设置开机启动

Linux CentOS 7 PostgreSQL 9.5设置开机启动

在云服务器 ECS Linux CentOS 7 下重启服务不再通过 service 操作,而是通过 systemctl 操作

Linux安装Python3.7(Centos 7)