升级到 Ubuntu 14.04 后无法请求没有 php 文件扩展名的 URL

升级到 Ubuntu 14.04 后无法请求没有 php 文件扩展名的 URL

将我的远程服务器升级到 Ubuntu 14.04(Apache 2.4)后,我无法使用以前的格式,在该格式中我可以在不调用文件扩展名的情况下请求 URI,就像在 CodeIgniter 等框架中调用页面的方式一样。

当我打电话时http://example.com/about我正在调用 about.php。这在 Ubuntu 12.04 中有效,但现在显示“找不到页面”。

这在我的本地机器上仍然有效,我的机器仍然是 12.04,所以我不认为这是一个 .htaccess 问题,也不认为这是一个站点可用文件问题。此外,这是使用 git 进行版本控制的,所以除了调用站点名称和文件路径的几个变量外,所有内容几乎相同。--更正:这是一个 .conf 问题,如下面我的更新中所述。

我已打开 a2enmod (mode_rewrite)。

但为了完整起见,我将提供 htaccess 和 sites-available 文件;

/etc/apache2/sites-avaialable/example.net.conf:

<VirtualHost xxx.xxx.xxx.xxx:443>
  SSLEngine On
  SSLCertificateFile /etc/apache2/ssl/domains/example.net/example.pem
  SSLCertificateKeyFile /etc/apache2/ssl/domains/example.net/example.key

  ServerAdmin [email protected]
  ServerName example.net

  DirectoryIndex index.php index.html
  DocumentRoot /var/www/html/example.net/www/

  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>

  <Directory /var/www/html/example.net/www>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
  </Directory>

  # Log file locations
  LogLevel warn
  ErrorLog  /var/www/html/example.net/logs/error.log
  CustomLog /var/www/html/example.net/logs/access.log combined
</VirtualHost>
<VirtualHost *:80>
  # Admin email, Server Name (domain name), and any aliases
  ServerAdmin [email protected]
  ServerName example.net
  ServerAlias www.example.net

  # Index file and Document Root (where the public files are located)
  DirectoryIndex index.php index.html
  DocumentRoot /var/www/html/example.net/www/

  <Directory />
    Options FollowSymLinks
    AllowOverride None
 </Directory>

  <Directory /var/www/html/example.net/www>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
  </Directory>

  # Log file locations
  LogLevel warn
  ErrorLog  /var/www/html/example.net/logs/error.log
  CustomLog /var/www/html/example.net/logs/access.log combined
</VirtualHost>

结束示例.net.conf

我应该注意到,这与我本地机器上无扩展名 URI 调用成功的情况相同。

更新:

我已将代码从我的 .htaccess 文件中移除,因为我决定不再使用它,因为它是不必要的并且会降低服务器速度。

我目前在 example.net.conf 文件中两个(80 和 443)VirtualHost 指令的底部都进行了此项设置:

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

这在一定程度上有效。我遇到的问题是,导航到文档根目录 -> example.com,现在只显示所有文件和目录的索引,而不是内容。

答案1

问题在于 .conf 文件(或 .htaccess,如果您正在使用该文件)。

我的 .conf 文件中有以下内容:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks -MultiViews
    RewriteEngine on

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

我最终了解到,从 Apache 2.2 开始,您必须在前面添加 DOCUMENT_ROOT。因此,以下内容现在有效:

<IfModule mod_rewrite.c>
    Options +FollowSymLinks -MultiViews
    RewriteEngine on

    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f
    RewriteRule ^(.*)$ $1.php [L]
</IfModule>

答案2

我创建了一个可以执行的配置示例/测试类/测试方法没有 .php 扩展名

对于重写规则,我遵循以下指南代码点火器

相关内容