リモートサーバーを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に移動すると、コンテンツではなくすべてのファイルとディレクトリのインデックスが表示されるようになったことです。
問題は.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 のガイドラインに従いました。