Apache的重定向和重写规则

时间:2017-10-17 19:08:27

标签: apache redirect mod-rewrite

我正在尝试在我的apache网络服务器上安装CalDAV客户端,并且我在使用重定向和重写规则的组合来获取所需的URL时遇到了问题。

我的网络服务器的文档根目录是/var/www,日历文件存储在/var/www/agendav/web/public中。如果我通过浏览器<website>/agendav/web/public/index.php进入,我可以轻松访问界面并使用它,因此这不是问题。但是,我所需的日历网址为<website>/calendar/,而不必通过agendav文件夹树。我一直试图通过重定向规则和重写规则来执行此操作,但收效甚微。我在这里找到了一些让我接近的答案,例如this onethis one,并且有重复工作,但我仍然遇到重写规则的问题。这是我目前的解决方案:

# Rules for the Calendar
Redirect "/calendar" "/agendav/web/public"
RewriteEngine On
RewriteCond %{REQUEST_URI} "^/agendav"
RewriteRule "^/agendav/web/public/(.*?)$" "/calendar/$1"

我目前的解决方案似乎有点循环。首先,我将用户重定向到agendav文件夹,然后尝试隐藏重写规则后面的重定向,当时我似乎可以通过单个重写规则逃脱。不幸的是,我工作的团队还不够大,无法拥有自己的专职服务器管理员,尽管知之甚少,但我最终得到了这份工作。任何帮助,以获得这一点将不胜感激。

1 个答案:

答案 0 :(得分:0)

你不需要重定向,你可以只使用重写规则,问题是你有条件和规则相反,你使用条件的真实路径而不是“虚拟”路径:

RewriteEngine on
RewriteCond %{REQUEST_URI} "^/calendar" [NC]
RewriteRule "^calendar/(.*)" "/agendav/web/public/$1"

根据此规则,http://yourwebsite/calendar/*的所有请求都在内部提供http://yourwebsite/agendav/web/public/*