Назад | Перейти на главную страницу

Невозможно запросить URL-адрес без расширения файла php после обновления до Ubuntu 14.04

После обновления моего удаленного сервера до Ubuntu 14.04 (Apache 2.4) я не могу использовать свой предыдущий формат, в котором я мог бы запрашивать URI без вызова расширений файлов, вроде того, как страницы вызываются в такой структуре, как CodeIgniter.

Когда я звоню http://example.com/about Звоню about.php. Это работало в Ubuntu 12.04, но теперь страница не найдена.

Это все еще работает на моем локальном компьютере, который все еще 12.04, поэтому я не считаю, что это проблема .htaccess, и не думаю, что это проблема с файлами, доступными для сайтов. Кроме того, эта версия контролируется с помощью git, поэтому все почти то же самое, за исключением пары Vars, которые вызывают имя сайта и пути к файлам. - ИСПРАВЛЕНИЕ: это проблема .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 webmaster@example.net
  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 webmaster@example.net
  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>

КОНЕЦ example.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 теперь просто отображается индекс всех файлов и каталогов вместо содержимого.

Проблема заключается в файле .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>

Я создал пример конфигурации, которая может выполнять / testclass / testmethod без расширения .php

Что касается правил перезаписи, я следовал рекомендациям на codeigniter