【问题标题】:Rewrite rule to return index.html in all subdirectories without change the url重写规则以在所有子目录中返回 index.html 而不更改 url
【发布时间】:2021-08-13 05:23:39
【问题描述】:

我有下一个配置

<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/”。我需要在没有这个斜杠的情况下维护 url。我认为问题出在 下一条规则: RewriteRule ^/?.+$ / [L] 但我不知道正确的制作方法

【问题讨论】:

标签: apache mod-rewrite virtualhost


【解决方案1】:

@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>

【讨论】:

    猜你喜欢
    • 2015-07-03
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2011-11-06
    • 2017-03-13
    相关资源
    最近更新 更多