我正在运行带有 Apache 2.2.22 和 PHP 5.3.10 的 Ubuntu 12.04。我希望用户能够在我的网站上请求页面,而不必键入“.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 文件中尝试了这两行......
RewriteEngine On
RewriteRule ^/(.*)$ /${lc:$1}
...并尝试访问 test/phpinfo.php 失败。然后我删除了 .htaccess 文件并将这两行直接放入我的“/etc/apache2/sites-available/default”文件中并重新启动了 Apache。由于某种莫名其妙的原因,我想要的行为现在正在起作用!我无法理解如何,因为我唯一的规则不会将“.php”附加到 URL !
这听起来可能很奇怪,但几乎感觉我的更改正在以某种延迟的方式生效。我尝试了一些其他的测试,这些测试没有立即起作用,但后来似乎在他们不应该起作用的时候起作用。我一直在测试并期望我当前的设置会在不更改任何内容的情况下中断。无论如何,我绝对感到困惑。
希望在我挖出我的大脑并用大锤砸碎它之前,有人能对此有所了解。