.htaccess配置符号链接和索引文件无法按预期工作

时间:2011-03-23 23:29:04

标签: php apache .htaccess symlink

与许多Web开发人员一样,当请求不是针对公共服务目录中存在的文件时,我喜欢使用.htaccess通过单个入口点将所有流量定向到域。

这样的事情:

RewriteEngine On
# enable symbolic links
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+) index.php [L]

这意味着如果请求不是针对css文件或图像,我的index.php会获取请求,我可以选择做什么(提供一些内容或者可能是404)

效果很好,但我偶然发现了一个似乎无法帮助我解决的问题。

我的文档根目录如下:

asymboliclink -> /somewhere/else
css
.htaccess
img
includes
index.php

然而,Apache没有将目录的符号链接看作目录。它将请求传递给root中的index.php。我希望将链接作为文件夹提供,因为它是指向具有自己index.php的文件夹的链接。我可以通过在浏览器的地址栏中输入http://example.com/asymboliclink/index.php来访问http://example.com/asymboliclink,但我希望能够通过{{3}}

访问它

我需要将哪些内容添加到我的.htaccess文件才能实现此目的?

2 个答案:

答案 0 :(得分:18)

使用-l开关测试符号链接

RewriteEngine On
# enable symbolic links
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+) index.php [L]

文档

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html - ctrl + f for“将TestString视为路径名并测试它是否存在,并且是一个符号链接。”

答案 1 :(得分:13)

-l标志引用符号链接

RewriteEngine On
# enable symbolic links
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+) index.php [L]