【问题标题】:.htaccess redirecting all URLs except one.htaccess 重定向除一个以外的所有 URL
【发布时间】:2013-04-28 07:02:43
【问题描述】:

我有一个运行以下目录结构的服务器:

/public_html
   | - /fingertools
   | - /css
   | - /static
   | - /media
   | - /js
   | - .htaccess

我的.htaccess在“public_html”文件夹的根目录下,网站的主要文件在“fingertools”文件夹下,是一个Django项目。

我想通过 .htaccess 将所有对 http://mydomain.com/ 的请求重写到“fingertools”文件夹,除了 http://mydomain.com/static/ 中的任何文件都应该重定向到“静态”文件夹。

我无法执行此操作,我需要将所有 CSS 和 JavaScript 放入此文件夹以使网站正常工作。

到目前为止我有这个:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !(fingertools)
RewriteRule ^(.*)$ fingertools/$1 [L]

这将我重定向到我的 Django 项目,给我一个 404 错误,因为没有在 urls.py 文件中映射 /static/ URL。有任何想法吗?非常感谢

【问题讨论】:

  • 不要那样做。 Django 不应该放在 DocumentRoot 文件夹下。您应该只将 /static/ 文件夹 mapped 映射到请求,但应用程序/站点的其余部分应该以其他方式公开,例如作为wsgi应用程序

标签: django apache .htaccess


【解决方案1】:
Options +FollowSymlinks

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_URI} !^/(fingertools|static)(/|$)
RewriteRule ^(.*)$ fingertools/$1 [L,QSA]

【讨论】:

  • 正则表达式是贪婪的,所以fingertools|static 将匹配fingertool(s|s)tatic,而不是(fingertools)|(static),这是行不通的。除非 apache 有非贪婪的正则表达式,但我从来没有听说过。
  • @J0HN 正则表达式| 运算符的工作方式类似于(fingertools)|(static),而不是fingertool(s|s)tatic。这不仅仅适用于 Apache。 “贪婪”意味着完全不同的东西。
  • @BrunoFinger 如果它对您满意,我将非常感谢您通过检查答案左侧复选标记的绿色轮廓将其标记为答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-07-13
  • 2014-09-11
  • 2015-09-29
  • 2012-06-19
  • 2014-07-23
  • 2016-11-12
  • 2021-05-01
  • 1970-01-01
相关资源
最近更新 更多