【问题标题】:.htaccess regex redirect by file type.htaccess 正则表达式按文件类型重定向
【发布时间】:2012-04-11 05:53:41
【问题描述】:

我目前正在 Google App Engine 中开发一个网站作为网站开发平台,但我最终希望能够将网站从动态模板编译为静态 HTML/CSS-only 版本。

就 URL 映射而言,所有站点文件都存在于站点根目录中,但我仍然希望能够将特定文件类型映射到文件夹。

例如:

  • /images - 包含所有图片
  • /scripts - 包含所有 JavaScript 文件
  • /stylesheets - 包含所有样式表

现在,在 GAE 中,我使用以下静态路由来路由这些路由:

url: /(.*\.(gif|png|jpg))
  static_files: /images/\1

url: /(.*\.css)
  static_files: /stylesheets/\1

url: /(.*\.js)
  static_files: /scripts/\1

如何在站点根目录使用包含正则表达式重写规则的 .htaccess 文件映射这些静态路由?

【问题讨论】:

  • 我对 GAE 不熟悉,也不太了解您想要在这里实现什么。您能否提供一些需要完成的“真实”示例(从 url -> 到 url)。我想我对你在这里想要做什么有一个想法,但我需要澄清一下。 (P.S.实际的重写规则应该很简单)
  • @LazyOne 这个想法是,如果你放 site.com/image.jpg,它会映射到 site.com/images/image.jpg。对于样式表,一个示例是 site.com/main.css -> site.com/stylesheets/main.css。总体思路是在不牺牲在后端组织文件的能力的情况下,使资产 URL 在物理上尽可能简单。最终,我将拥有一个文件夹 site.com/html,其中将包含整个网站的静态 HTML/CSS 页面,但我仍在处理这部分。

标签: regex url-rewriting


【解决方案1】:

你可以使用这个 .htaccess 配置

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^(.*\.(gif|png|jpg))$ /images/$1
RewriteRule ^(.*\.css)$ /stylesheets/$1
RewriteRule ^(.*\.js)$ /scripts/$1

第 2 - 5 行仅当您希望 apache 在文件/链接/目录实际存在时不重写。

【讨论】:

  • 太棒了。我特别喜欢添加第 2-5 行,即使我不需要它。我还没有测试以确保它有效,但无论如何我现在都会给你功劳。谢谢。
  • 这个不用回答了,这个配置也可以用在httpd.conf吗?我只在 .htaccess 文件中使用过重定向/重写规则,如果 Apache 配置文件可以编辑,我想消除 .htaccess 文件(即为了速度/效率)。
  • 我也只玩过 .htaccess 文件。但是把它移到 httpd.conf 应该没有什么困难。只需将其包装在 <Directory "/var/www/html">-tag 中即可指定它适用于哪个目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 2018-05-31
  • 2018-01-17
  • 2011-08-30
  • 1970-01-01
相关资源
最近更新 更多