.htaccess 单页网站

M Z*_*tra 8 .htaccess url-routing

我有一个带有 URL 参数的单页网站,它仍然应该打开单个 index.html(用 Vue.JS 和 Vue.JS 路由器制作)。例如,有www.example.com/www.example.com/user、 和www.example.com/user/project/myproject。现在,如您所料,我无法将其与我的 .htaccess 文件一起使用。

我已经尝试了很多方法来让它发挥作用:

Order allow, deny
Deny from all
<FilesMatch ^(index\.html)?$>
  Allow from all
</FilesMatch>

IndexIgnore *
DirectoryIndex index.html
Run Code Online (Sandbox Code Playgroud)

这没有做任何事情。然后我用这个替换了我的 .htaccess 文件的内容:

RewriteEngine On
RewriteRule ^$ index.html/ [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.html/$1 [QSA,L]

Options All -Indexes
Run Code Online (Sandbox Code Playgroud)

它改变了一些东西,但不是正确的东西。由于www.example.com/user明显找不到目录,因此给出了 HTTP 错误 404。

我的目标

像这样的树:

????assets
????downloads
?index.html
?robots.txt
Run Code Online (Sandbox Code Playgroud)

我希望只能访问index.html用于任何参数组合的那个。访问assets并且downloads应该是可访问的,因为人们应该能够正确查看页面并下载内容(如果他们愿意)。assets包含静态资源,对于downloads.

我查看了大量资源,但似乎没有一个能给我完美的结果。我希望你能帮助我。

谢谢你的时间!

更新

将怀特先生和 Lacek 的答案结合起来似乎可以解决问题,但现在有一个重要的问题。所有文件似乎都加载了 index.html 的内容。所以每个图像、js、CSS 等都有一个 HTML、BODY、HEAD、DIV、SCRIPT(等等)标签作为数据而不是它们的实际数据,比如图像的像素数据。

这是我.htaccess现在的样子:

Options All -Indexes
DirectoryIndex index.html

<Files index.html>
    AcceptPathInfo On
</Files>

RewriteEngine On

RewriteRule ^index\.html - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]
Run Code Online (Sandbox Code Playgroud)

和虚拟主机配置(域审查):

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example/html

    AliasMatch "/.*" "/var/www/example/html/index.html"
    Alias "/assets"  "/var/www/example/html/assets/"
    Alias "/downloads"  "/var/www/example/html/downloads/"

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

查看下面的评论和答案下面的更多上下文。

来源

ServerFault - 301 将整个域重定向到单个页面 .HTACCESS

ServerFault - 带有参数的多个页面的 htaccess 重写规则

ServerFault - 我的网站 htaccess 有问题

HT访问指南

HTAccess 备忘单

HTAccess 备忘单 - Duck Duck Go

Lac*_*cek 3

尝试这个:

Alias "/download"  "/wherever/your/app/is/download/"
AliasMatch "/.*" "/wherever/your/app/is/index.html"
Run Code Online (Sandbox Code Playgroud)

这些指令将路由/download/*index.html文件之外的所有内容。

这些必须包含在VirtualHost配置中,而不是文件中.htaccess。请注意,使用该Alias指令时,您必须使用完整的文件系统路径,而不是 webroot 下的相对路径。

另外,正如 @MrWhite 指出的,您可能希望显式启用 html 页面的 PathInfo 的使用,如下所示:

<Files index.html>
    AcceptPathInfo On
</Files>
Run Code Online (Sandbox Code Playgroud)