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 操作