1

无法在此处的 .htaccess QA 中找到我要查找的内容,如果重复,请原谅我。我对静态 HTML 网站有以下问题。结构如下。

info.html我的相对路径contact.html必须使用/home/css/style.csswhileindex.html使用/css/style.css. 感谢帮助。

Root
- .htaccess
↳ Drupal
  - .git
↳ Dev
  - .git
↳ Home
  - .htaccess
  - .git
  - css
  - js
  - img
  - info.html
  - contact.html
  - index.html

目标

  • Dev.example.com使用所有文件/Dev
  • example.com使用所有文件example.com/home
  • example.com/info从重定向example.com/home/info.html
  • example.com/contact从重定向example.com/home/contact.html

到目前为止我尝试过的

在根 .htaccess

      # Set a default home directory, (this subfolder always loads)
  # RewriteEngine On
  # RewriteCond %{THE_REQUEST} ^GET\ /home/
  # # RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
  # RewriteRule ^home/(.*) /$1 [L,R=301]

  # RewriteCond %{HTTP_HOST} ^(www\.)?example.com$
  # RewriteRule !^home/ home%{REQUEST_URI} [L]

  Options -Indexes

  ErrorDocument 404 /missing.html

  # compress text, html, javascript, css, xml:
  AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4.0[678] no-gzip
  BrowserMatch bMSIE !no-gzip !gzip-only-text/html

  <FilesMatch "\.(htm|html|css|js)$">
  AddDefaultCharset UTF-8
  </FilesMatch>

  RedirectMatch 404 "(?:.*)/(?:\.git|file_or_dir)(?:/.*)?$"

  # remove .html from html file names
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301]
  RewriteCond %{REQUEST_FILENAME}.html -f
  RewriteRule ^(.+)/$ $1.html [L]

在 Root/drupal .htaccess

default drupal stuff

我能找到的最接近的答案:


编辑:我最终部分遵循了给出的建议,因为每个子目录都有单独的 git repos。谢谢@Jon Lin 和@tttony!

新问题:根目录中的 .htaccess 不允许我查看子文件夹中的 drupal 安装。

  • Drupal.examples.com/Drupal使用来自**的所有 drupal 文件
4

2 回答 2

2

到目前为止,最简单的事情就是让home您的文档成为根目录,而不必担心有一个子目录。

但是对于您必须工作的内容,您需要做的第一件事是将所有内容路由到/home,而不仅仅是/请求:

RewriteEngine On
RewriteRule ^(.*)$ /home/$1 [L]

其次,这个条件:

RewriteCond %{REQUEST_FILENAME}.html -f

如果你有一个斜杠,总是会失败,因为它会尝试检查看起来像这样的文件:

/home/contact/.html

试试这个:

# remove .html from html file names
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301]
RewriteCond %{REQUEST_URI} ^/(.*)/$
RewriteCond %{DOCUMENT_ROOT}/home/%1.html -f
RewriteRule ^(.+)/$ $1.html [L]
于 2013-10-14T05:15:29.453 回答
2

我遇到了子文件夹的问题,您可以尝试在根 .htaccess 中使用RewriteBase

RewriteEngine On
RewriteBase /home/

但我发现最好只使用根文件夹中的一个 .htaccess 文件

# remove .html from html file names
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ %{REQUEST_URI} [L,R=301]
RewriteCond home/%{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ home/$1.html [L]
于 2013-10-14T05:16:52.967 回答