web-dev-qa-db-ja.com

Ubuntu 14.04にアップグレードした後、phpファイル拡張子のないURLをリクエストできません

リモートサーバーをUbuntu14.04(Apache 2.4)にアップグレードした後、CodeIgniterのようなフレームワークでページが呼び出されるようなファイル拡張子を呼び出さずにURIを要求できる以前の形式を使用できません。

http://example.com/about に電話するとabout.phpに電話します。これはUbuntu12.04で機能しましたが、ページが見つかりません。

これはまだ12.04である私のローカルマシンでまだ機能するので、これが.htaccessの問題であるとは思わないし、サイトで利用可能なファイルの問題であるとも思わない。また、これはgitを使用してバージョン管理されているため、サイト名とファイルパスを呼び出すいくつかのVarを除いて、すべてがほぼ同じです。 -訂正:これは、以下の私の更新で述べられている.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>

Example.net.confを終了します

これは、拡張子のないURI呼び出しが成功するローカルマシンでも同じであることに注意してください。

更新:

.htaccessファイルのコードは不要であり、サーバーの速度が低下するため、使用しないことにしたため、コードを削除しました。

私は現在、両方(80と443)のVirtualHostディレクティブの下部にあるexample.net.confファイルにこれを設定しています。

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

これはある程度機能します。私が抱えている問題は、ドキュメントルート-> example.comに移動すると、コンテンツではなくすべてのファイルとディレクトリのインデックスが表示されるようになったことです。

2
earth2jason

問題は.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>
5
earth2jason

/ testclass/testmethod 。php拡張子なしで実行できる構成例を作成しました

書き換えルールについては、 codeigniter のガイドラインに従いました。

0
Tk421