Lamp 服务器不显示没有扩展名的文件

Lamp server not showing file without extension

我在 lamp 堆栈中创建了一个虚拟主机,我遇到了一个奇怪的问题。问题是当我打开虚拟主机站点时 www.domain.com 主页加载没有任何问题。

但是当我使用导航栏打开另一个页面时,我得到一个“404 NOT FOUND”,即 www.domain。com/about

但是只要我手动输入文件的扩展名,页面就会加载。 www.domain.com/about.php

我该如何解决这个问题。我正在使用 .htaccess 来隐藏文件的扩展名。

注意: 1) 所有其他本地文件 运行 正确,即我有一个工作正常的 wordpress 站点(这意味着 mysql 数据库没有导致错误)

2) 虚拟主机设置正确,因为启用虚拟主机时终端没有显示任何错误。

但是 wamp 中的虚拟主机在我的 windows 8.1 pro 中没有给我任何类型的问题。

编辑: .htaccess 中隐藏扩展的代码在我的 windows 电脑上没有任何问题。

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ .php
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*)$ .html

编辑-2

<VirtualHost *:80>
    <Directory /var/www/stab-website>

        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order allow,deny
        allow from all

    </Directory>

    DocumentRoot "/var/www/stab-website"
    ServerName stab-site.com

    ServerAlias  www.stab-site.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

还是不行。

您需要启用 MultiViews 选项:

<VirtualHost *:80>
  <Directory /var/www/htdocs>
    Options Indexes FollowSymLinks MultiViews
  </Directory>

  ServerAdmin webmaster@dummy-host.example.com
  DocumentRoot "/var/www/htdocs"
  ServerName dummy-host.example.com
  ServerAlias www.dummy-host.example.com
</VirtualHost>

这可以在您的 httpd.conf 文件、虚拟主机的配置文件或 .htaccess 文件中完成。

您还应确保 mod_negotiation 模块已启用。这可以通过 运行:

来完成
sudo a2enmod negotiation

您可能还需要验证您的虚拟主机配置是否正确,这可以从终端使用:

apache2ctl -t

之后您需要重新启动服务器:

sudo service apache2 restart

来自documentation

The effect of MultiViews is as follows: if the server receives a request for /some/dir/foo, if /some/dir has MultiViews enabled, and /some/dir/foo does not exist, then the server reads the directory looking for files named foo.*, and effectively fakes up a type map which names all those files, assigning them the same media types and content-encodings it would have if the client had asked for one of them by name. It then chooses the best match to the client's requirements.

感谢@Cyclone 的帮助

这个 post 帮我解决了这个问题 https://askubuntu.com/questions/233046/how-to-give-my-user-permission-to-add-edit-files-on-local-apache-server

上面的 post 有助于 运行 Apache 服务器作为登录用户。

赋予.htaccess的使用权--

首先,您应该确保您的用户名包含在 www-data 组中。如果没有,您可以将您的用户名添加为 www-data group

sudo adduser $USER www-data

之后,您应该将 /var/www 的所有权更改为您的用户名

sudo chown $USER:www-data -R /var/wwws

并且不要忘记在 apache2.conf

中添加此代码

<Directory /var/www/ProjectRootDirectory> AllowOverride All </Directory>