【问题标题】:.htacces redirect assets to assets folder.htaccess 将资产重定向到资产文件夹
【发布时间】:2013-10-29 07:45:06
【问题描述】:

我有我的 PHP 站点设置,每个站点都有一个文件夹(例如登录),其中有一个 Index.php 文件和站点特定的资产。但是,每个页面都需要的一些资产存储在位于最高级别正下方的“资产”文件夹中(这有意义吗?)。

我玩过 .htaccess 并得到了这个代码

RewriteEngine on
RewriteBase /
RewriteRule ^(.*)$ http://janberktold.com/Assets/$1 [R=301,L]

但是,我的问题是:它重定向

localhost/Login/test.css

localhost/Assets/Login/test.css

而不是

localhost/Assets/test.css

如何让我的服务器重定向到正确的路径?

【问题讨论】:

  • 尝试将/Assets/test.css 作为您的链接网址并删除.htaccess。喜欢<link rel="stylesheet" ... href="/Assets/test.css" />
  • @imsiso 我知道该解决方案,但是我希望能够只放置“test.css”并为此重定向。可能只是为了知道如何去做。
  • 请检查我的答案。
  • 为什么需要 301 重定向?
  • @tttony 这不是必需的,我只是使用它,因为我已经看到了一个使用它的示例

标签: php regex apache .htaccess mod-rewrite


【解决方案1】:

试试这个

RewriteEngine on
RewriteBase /

# Rewrite if the file does not exists
RewriteCond %{REQUEST_FILENAME} !-f

# Rewrite only if the URI does not starts with Assets
RewriteCond %{REQUEST_URI} !^/Assets

# Rewrite any assets file
RewriteRule ([^/]*).(css|js|png|jpe?g)$ Assets/$1.$2 [L]

这应该将所有资产文件 localhost/dir/file.csslocalhost/dir/dir2/file.css 重写为 localhost/Assets/file.css

【讨论】:

  • +1 不错,但其他资产呢?具有多扩展支持的解决方案怎么样? + 我的答案如何?
  • 我在这里有一个相反的场景,我的资产文件夹的路径是相对的,就像 img src="../../assets/img.png" 这样我不能编辑代码只有我可以做的是从htaccess文件重写。我的根文件夹是 /abc。你能给我一个重定向规则,提到任何 /../..assets/img.png 像 /abc/assets/img.png
【解决方案2】:

将您的规则替换为:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(?:[^/]*/)*([^/.]+\.(?:jpe?g|gif|bmp|png|tiff|css|js))$ /Assets/$1 [R=301,L,NC]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-23
    • 2014-04-30
    • 1970-01-01
    • 2012-01-14
    • 2012-03-10
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多