问题描述
<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>