私はUbuntu12.04をApache2.2.22とPHP5.3.10で実行しています。ユーザーが「.php」拡張子を入力せずに、大文字と小文字の区別を気にせずに、自分のサイトのページをリクエストできるようにしたいと思います。たとえば、次のようなURL ...
http://www.site.com/test/phpinfo
http://www.site.com/test/PhPiNfO
...両方が次のことにつながるはずです:
http://www.site.com/test/phpinfo.php
この質問で受け入れられた回答に従うことで、大文字と小文字を区別しないことから始めました。'/ etc / apache2 / sites-available/default'ファイルは次のようになります...
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
RewriteMap lc int:tolower
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<Directory /var/www/test>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
...そしてこれが私の.htaccessファイルです:
RewriteEngine On
RewriteRule ^([a-z]+)/([a-z\-]+)$ /${lc:$1}/${lc:$2}.php [L,NC]
ファイル拡張子の部分は機能していますが、何らかの理由で大文字と小文字の区別が引き続き適用されています。私のApacheエラーログは次のような行でいっぱいです:
[Sat Jan 05 23:10:41 2013] [error] [client 192.168.1.9] File does not exist: /var/www/test/phpinfO
私がここで間違っていることについて何か考えはありますか?
編集:数時間実験した後、私は最も奇妙な行動を見ています!.htaccessファイルが単に無視されているのではないかと思ったので、それをぎこちなく埋めました。これにより、予想どおり内部サーバーエラーが発生しました。次に、.htaccessファイルでこれらの2行だけを試しました...
RewriteEngine On
RewriteRule ^/(.*)$ /${lc:$1}
...そしてtest/phpinfO.phpにアクセスしようとしましたが失敗しました。次に、.htaccessファイルを削除し、これらの2行を「/ etc / apache2 / sites-available / default」ファイルに直接配置して、Apacheを再起動しました。なんらかの理由で、私が望んでいた動作が機能しています。私の唯一のルールはURLに「.php」を追加しないので、私はおそらくその方法を理解することはできません!
これは奇妙に聞こえるかもしれませんが、私の変更が少し遅れて有効になっているように感じます。すぐには機能しない他のテストをいくつか試しましたが、後で機能するはずのないときに機能するようでした。私はテストを続け、現在のセットアップが何も変更せずに壊れることを期待しています。いずれにせよ、私は絶対に困惑しています。
私が脳を引き裂いてスレッジハンマーで粉砕する前に、誰かがこれに光を当てることができることを願っています。