微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重写规则以在所有子目录中返回 index.html 而不更改 url

如何解决重写规则以在所有子目录中返回 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 举报,一经查实,本站将立刻删除。