PHP 无法在没有扩展名的文件中工作


PHP isn't working in file without extension

我有这样的设置:

images
    image1.jpg
    image2.jpg
header.html
about
    index.php
    image3.jpg

但是去 MyWebsite.com/About 最后给了它一个额外的斜杠。我决定采用在我的主目录中创建一个名为about的文件的解决方案:

images
    image1.jpg
    image2.jpg
header.html
about
aboutfiles
    image3.jpg

问题是现在这个文件不允许我使用.php:

<?php include('header.html');?>

它不显示头文件。我能做些什么来完成这项工作?

您的问题是您的 Web 服务器无法将文件名"about"识别为 php 文档。您有三个选择

  1. 在页面文档上使用".php"扩展名,例如"index.php",它将运行您的 php 脚本。
  2. 安装一个解决方案(如 mod_rewrite),将 url(如/about)转换为实际文件(如"about.php)。
  3. 调整 php 文档的服务器 mime 类型。在此处了解有关 MIME 类型的更多信息。https://developer.mozilla.org/en-US/docs/Properly_Configuring_Server_MIME_Types

第一个解决方案是最简单和最简单的,在您使用PHP的任何文档中,扩展名都应该.php

关于mywebsite.com/about问题,它更像是一个Apache配置问题。你必须告诉 Apache index.php 应该是一个索引文件。

首先,你可以配置你的Apache(或IIS)来使用任何扩展来处理PHP代码。如果需要,可以将.ThisIsAPHPFile定义为有效的扩展。

但是,目录总是以尾随/www.example.com/dir1/(浏览器并不总是显示尾随/)反映,而文件具有扩展名:www.example.com/dir1/index.html

所以,从我所看到的,你想使用www.example.com/about但显示关于文件?

因此,您可以使用 Web 服务器的重写引擎。要么在使用Apache时查看mod-rewrite(http://httpd.apache.org/docs/current/en/mod/mod_rewrite.html),要么在使用IIS时(一种可能性)ISAPI-Rewrite(http://www.isapirewrite.com/docs/)。

如果您在 apache conf 文件中编辑 virtualhost 指令,则可以添加以下内容:

DefaultType application/x-httpd-php 

这将告诉 apache 发送不以扩展结尾的 Web 路径以使用 php 引擎进行渲染。

因此,/about 的行为就好像它是 about.php。 另一种可能更有用的方法是在服务器上命名文件about.php,并允许在URL中不使用.php引用它。 为此,您将以相反的方式对其进行配置。

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]