【问题标题】:Default to PHP extension on web server默认为 Web 服务器上的 PHP 扩展
【发布时间】:2011-09-22 14:29:35
【问题描述】:

有没有办法可以编写 .htaccess 文件以便

http://www.mysite.com/about 

加载about.php

任何文件都一样?

我试过了

RewriteEngine On
RewriteRule ^([0-9A-Za-z]+)$ $1.php

但它似乎不起作用。

【问题讨论】:

  • 你的重写是做什么的?我的意思是,它是如何失败的?
  • 重写规则看起来不错。只是为了确认一下,您正在运行 Apache Web 服务器,对。这种技术显然不适用于 IIS。
  • @Michael 它什么也没做 - 它似乎不起作用。
  • @Spudley 是的,它是一个 Apache 服务器。
  • @Rio 尝试从匹配表达式的开头删除 ^。

标签: php apache .htaccess


【解决方案1】:

这是最常见的规则(使用 mod_rewrite -- 确保它已加载并启用) -- 它将确保这样的 .php 文件在重写之前确实存在(是的,它有点慢但更安全):

Options +FollowSymLinks
RewriteEngine On

# add .php file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.+)$ $1.php [L]

或者只使用这个:

Options +MultiViews

这将开启“内容协商”。但它有一些缺点。

例如:假设您的网站根文件夹中有hello.html 和hello.php。如果您请求example.com/hello,启用该选项后,Apache 将寻找替代名称(名称相同但扩展名不同)并将提供hello.html 或hello.php(我不知道哪个是首选)。

但是,如果您只有 1 个具有这种唯一名称的文件(例如 hello.php ONLY),那么这里根本没有问题。

【讨论】:

  • 我完全按照您在justnear.me/about 上所说的进行了尝试,但它似乎不起作用(about.php 在哪里起作用)。
  • 1) 您是在自己的服务器上.. 还是在共享主机上? 2) 请与托管公司再次检查/确认 mod_rewrite 已安装并启用,并且 3) .htaccess 文件已启用(一些托管公司出于安全和性能目的禁用它们)。 4) 检查您的 Apache 的错误日志以获取可能的错误消息。规则和替代方法绝对是可行的解决方案——它必须是您特定的 Apache 配置/设置。
  • 另外...您是否还有其他重写规则?他们可能会干扰此规则(这完全取决于您的规则及其顺序)。
猜你喜欢
  • 1970-01-01
  • 2021-11-21
  • 2012-04-26
  • 2015-07-07
  • 1970-01-01
  • 2011-10-07
  • 2020-03-24
  • 1970-01-01
  • 2014-12-29
相关资源
最近更新 更多