如何解决重写规则以在所有子目录中返回 index.html 而不更改 url
<VirtualHost *:443>
ServerName projectsite.com
ServerAlias projectsite.com
DocumentRoot /var/www/project
<Directory />
RewriteEngine On
Options +FollowSymlinks
AllowOverride All
Require all grant
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^/?.+$ / [L]
</Directory>
</VirtualHost>
该项目管理来自客户端的所有 url,因此,我只需要返回 index.html 文件并使用 javascript 呈现模块。它工作正常,但如果 url 与文件夹匹配,那么我会收到 403 错误“禁止”。取而代之的是,我需要返回根 index.html 文件,或者 url 是否与目录名称匹配。
¿我该怎么做?我试图在互联网上找到但我没有找到类似的东西。
更新:
Dusan Bajic 如何告诉我的,我删除了该行 RewriteCond %{REQUEST_FILENAME} !-d
并解决了第一个问题,但现在规则在 url 的最后添加一个斜杠,
如果我有“site.com/reports”,它会更改为“site.com/reports/”。我需要维护没有这个斜线的网址。我认为问题出在
下一条规则:
RewriteRule ^/?.+$ / [L]
但我不知道正确的制作方法
解决方法
@dusanBajic 如何评论我有一个阻止我需要的规则。 规则是:
RewriteCond %{REQUEST_FILENAME} !-d
此规则表示重写规则仅适用于文件夹不存在的情况。所以我所做的是删除该指令并添加下一个规则 DirectorySlash Off
以防止 apache 在 url 的末尾添加斜杠。
代码如下:
<Directory />
RewriteEngine On
Options +FollowSymlinks
DirectorySlash Off
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^/?.+$ / [L]
</Directory>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。