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 重写规则
尝试这个:
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)
归档时间: |
|
查看次数: |
2112 次 |
最近记录: |