.htaccess重写动态软链接隐藏目录

时间:2013-04-03 10:58:04

标签: php .htaccess mod-rewrite symlink hardlink

我不确定如何表达这个问题,但希望我的描述对于我希望实现的目标更有意义。

我目前正在构建一个支持多个应用程序的框架。目录结构如下:

/applications/

--/admin/
----/www/
------/css/
--------/bootstrap.css
------/img/
--------/logo.png

--/gallery/
----/www/

/system/
/www/ <- web root
--/.htaccess
--/index.php

我正在使用php中的PATH_INFO数据为“漂亮的网址”重写网址。

site.com/index.php/path/info/data/

相同

site.com/path/info/data/

所以一切都会经过index.php

框架的基本前提是,url的第一部分将与应用程序名称相关:

site.com/admin/ <- will load the admin application
site.com/gallery/ <- will load the gallery application
site.com/ <- will load what ever the default application is (specified in a framework config)

现在我想要这个重写规则(如果有可能),请使用一些示例网址来帮助说明我的观点。

site.com/admin/login /

  1. 规则获得第一段 admin

  2. 规则检查应用程序目录中是否存在 admin 文件夹

  3. 如果存在,请通过 site.com/admin/www/

    admin / www 内容LI>
  4. 禁用目录查看,仅允许链接到文件,因此无法访问 site.com/admin/www/img / ,但 site.com/admin/www/ img / logo.png 可以访问

  5. 只有文件优先于index.php重写,因此即使文件夹存在, site.com/admin/www/img / 也会传递给index.php,但是 site.com/admin/www/img/logo.png 始终引用该文件,除非它不存在,在这种情况下它会传递给index.php

  6. 所以要澄清一下,这里有一些链接以及我希望他们做什么(使用上面的示例目录列表):

    site.com/ < index.php
    site.com/admin/ < index.php
    site.com/admin/www/ < index.php
    site.com/admin/www/nonexistantfile.php < index.php
    site.com/gallery/ < index.php
    site.com/admin/www/css/ < index.php
    
    site.com/admin/www/css/bootstrap.css < bootstrap.css
    site.com/admin/www/img/logo.png < logo.png
    

    虽然我可以按照我想要的方式使用框架本身,但是在每个资产负载上运行uri解析引擎和任何其他框架部件会非常耗费资源,这就是为什么我要使用.htaccess来处理这个问题

    由于

2 个答案:

答案 0 :(得分:1)

尝试在.htaccess文件中使用此功能:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*) /index.php

RewriteRule %{REQUEST_URI} ([a-z0-9-_]+)\.(php|png|css)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) /index.php

你说你想要重写它们,但是如果你不想要'因为它不是搜索引擎友好的,只需在代码[R]之后添加/index.php标志,但不要忘记旗帜前的一个空格,使它们重定向。

答案 1 :(得分:0)

不会是这样的吗?:

# File: www/.htaccess

RewriteEngine on

RewriteBase /
# If a file exists, serve it directly
RewriteCond %{REQUEST_FILENAME} !-f

# otherwise forward the request to the index.php
RewriteRule . index.php

确保您已启用mod_rewrite并为AllowOverride添加适当的.htaccess指令才能生效。