Apache2 RewriteRule 不起作用

Apache2 RewriteRule 不起作用

我之前是这样配置我的 apache2 的:

<VirtualHost _default_:443>
    ...
    RewriteEngine on
    RewriteCond %{HTTPS}  !=on
    RewriteRule "^/?(.*)" "https://%{SERVER_NAME}/$1"    # HTTPS auto redirect
    RewriteRule "^/example/?$" "/example.json"
    ...

当我访问example.com/exampleexample.com/example/它确实显示了的内容时example.com/example.json

然后我又安装了另一个软件,它需要访问/software/web主页,而除此以外的目录web不应该暴露给公众。所以我写了这个:

# DocumentRoot is /var/www/html
<Directory /var/www/html/software/>
    Require all denied
    AllowOverride All
</Directory>

<Directory /var/www/html/software/web/>
    Require all granted
    AllowOverride All
</Directory>

它通过访问 来工作example.com/software/web。我想重写链接以省略该/web部分(这样我就可以只输入example.com/software),因此我尝试添加以下内容:

RewriteRule "^/software/?$" "/software/web"

然而,当我尝试访问缩短的 URL 时,它给出了 403 错误:

You don't have permission to access /software/ on this server.

我尝试添加这样的尾部斜杠:

RewriteRule "^/software/?$" "/software/web/"

然后它说

You don't have permission to access /software/app.php on this server.

我尝试对正则表达式进行几次调整,但效果不佳。如何让它工作?任何帮助都值得感激。

答案1

您的配置中似乎有另一个 RewriteRule 正在重写/software//software/app.php。由于与/software/app.php您编写的正则表达式不匹配,因此它永远不会被应用。

您可能希望将此重写移到配置中的较早位置,在添加 的重写之前。如果您不希望在重写之后应用任何其他重写,app.php您可能还希望在重写之后添加标志。[L]/web/

相关内容