我之前是这样配置我的 apache2 的:
<VirtualHost _default_:443>
...
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule "^/?(.*)" "https://%{SERVER_NAME}/$1" # HTTPS auto redirect
RewriteRule "^/example/?$" "/example.json"
...
当我访问example.com/example
或example.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/