【问题标题】:.htaccess redirect only for resources.htaccess 仅针对资源重定向
【发布时间】:2013-03-26 14:00:51
【问题描述】:

我正在尝试一个解决方案来获得类似的东西:

/dev/base/route.php -> include "/dev/base/mysite/index.php"

对于 php,我使用这个系统当然没有问题,所有代码都可以正常工作,但是对于 html 标签(例如<img<link 等)我需要将请求重定向到./dev/base/mysite/目录。

我正在尝试使用 htaccess 解决它(不更改 url 栏),使用以下代码:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond /mysite/$0 -f
RewriteCond /mysite/$0 -d
RewriteRule ^$ /mysite/$0 [L]

但它不起作用。 (我对 mod_rewrite 不是很熟练)

另外,我不能在 htaccess 文件中静态指定/dev/base/ 路径,它应该“自动”解决,因为它可以根据工作站而改变。

所以我需要一些在伪 php 代码语法中应该类似于它的东西:

if ( file_exists(SITE_ROOT_DIR."/mysite/".$request) && !file_exists(SITE_ROOT_DIR."/".$request) )
   $url=SITE_ROOT_DIR."/mysite/".$request;
else
   $url=SITE_ROOT_DIR."/".$request;

提前致谢!

【问题讨论】:

    标签: php .htaccess mod-rewrite resources subdirectory


    【解决方案1】:

    用这个改变你的代码:

    RewriteBase /dev/base/
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -l
    ## don't do anything
    RewriteRule ^ - [L]
    
    RewriteCond %{DOCUMENT_ROOT}/dev/base/mysite/$1 -f [OR]
    RewriteCond %{DOCUMENT_ROOT}/dev/base/mysite/$1 -d [OR]
    RewriteCond %{DOCUMENT_ROOT}/dev/base/mysite/$1 -l
    RewriteRule ^(.*?)/?$ mysite/$1 [L]
    

    【讨论】:

    • 但是 %{DOCUMENT_ROOT} 也不包含 /dev/path/ (那是 htaccess 所在的位置)所以我需要手动添加它,而不是我会发现自动
    • 请告诉我你的 DOCUMENT_ROOT 是什么,这个 .htaccess 驻留在哪里?
    • 我的文档根目录是 home/workspace/ 而我的 .htaccess 在 /home/workspace/dev/base/ 里面,我需要这个结构
    • 那么mysite到底是什么?
    • /mysite/ 是 /home/workspace/dev/base/ 的子目录,其中我有所有文件夹,如图像、css 等......但它们必须像在 /home/ 中一样workspace/dev/base/ 而是使用 htaccess (没有符号链接或其他解决方法).. 看看我的伪代码,很清楚
    猜你喜欢
    • 2012-05-24
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2011-08-27
    相关资源
    最近更新 更多