Apache .htaccess 重定向在别名应用中的问题

在 Apache 应用的目录中有 .htaccess 文件来进行重定向,目的是实现省略扩展名 .php 来访问相应的 php 文件,例如用 url

http://localhost/unmi/forgotPassword  来访问  http://localhost/unmi/forgotPassword.php

.htaccess 文件的内容是:

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

结果访问 http://localhost/unmi/forgotPassword 时出现错误:

Not Found

The requested URL /data/unmi/forgotPassword.php was not found on this server.

实际上文件 /data/unmi/forgotPassword.php 是存在的。这就奇怪了,怀疑过是文件权限的问题(Mac 平台),改成 755 也不行。也经为是 AllowOverride 的问题,可它的值我设置成了 All 啊,又不是 None,应该不是症结所在。

费了一番功夫也明白了我是配置了别名来访问应用的,在 Apache httpd.conf 中是这样定义的别名:

Alias /unmi/ "/data/unmi/"
<Directory "/data/unmi/">
    Options All
    AllowOverride All
    Order deny,allow
    Allow from all
</Directory>

注:上面为图省事,把 Options, AllowOverride, Allow from 都简单配为 All 值

Not Found 的原因就是在别名定义的应用中使用 .htaccess 重定向时,我们还需在 .htaccess 中加上 RewriteBase 指定基准目录。完整的 .htaccess 内容如下:

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

RewriteBase 指定下前面配置的那个别名,即  /unmi/

这样就能完成别名应用中的 forgotPassword 到 forgotPassword.php 的重定向了。

同在 Tomcat 不能正确启动时总是别忘了去查看 $TOMCAT_HOME/logs/catalina.out 文件找原因一样,Apache 下有问题,一般在 Apache 的日志文件中能找到重要线索。

Mac 的 Apache2 错误日志文件一般是 /var/log/apache2/error_log; 访问日志文件 /var/log/apache2.access_log,访问日志中可以发现你定义别名时斜杠 / 够不够。

另外:Mac Apache2 的配置文件是 /etc/apache2/httpd.conf。

本文链接 https://yanbin.blog/apache2-htaccess-redirect-alias/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments