忽略.htaccess中干净URL中的符号链接

时间:2009-11-21 11:42:56

标签: apache .htaccess mod-rewrite symlink

示例网址:

example.com/user

/ user既是符号链接目录,也是我网站上内容的有效URL。我使用Horde Routes来请求内容,所有对站点的请求都通过index.php。

我目前有一个.htaccess文件,如下所示:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

#allow cool urls
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php [L]
#allow to have Url without index.php

但是转到/ user会列出目录内容而不是网页。是否可以忽略符号链接?

除此之外,如果您要求:

example.com/user/some-css-file.css

这是一个不应忽略的有效请求。那么是否可以通过符号链接来允许文件,但是基本的符号链接本身会被忽略并转到index.php?

谢谢:)

2 个答案:

答案 0 :(得分:1)

忘记符号链接只需创建另一个RewriteRule。将它放在“允许酷网址”规则之前:

RewriteCond %{REQUEST_URI} ^/user/$ 
RewriteRule (.*) /index.php [L]

所以http://www.example.com/user/http://www.example.com/user 应该转到内容。 [L]应防止进一步处理规则。

答案 1 :(得分:1)

!-d的测试在请求/user/时将失败,因为它实际上是现有目录。您可能希望在没有该条件的情况下使用它,并且只允许直接访问现有文件而不允许直接访问目录:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) index.php [L]

此外,您可以将模式^(.*)替换为!^index\.php$,以便 index.php 的请求不需要文件系统查找:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !^index\.php$ index.php [L]