我想使用 apache 设置多个重定向,但完全不知道该如何做?
我有一个 nodejs 实例,它在我的服务器的端口 4000 上运行,为我的主页提供服务。可以从 localhost:4000 的服务器访问它(端口 4000 不开放给外部访问)。
我有一个博客,它是一个 wordpress 实例。
该博客位于 mysite.com/blog
所以。我希望所有对 mysite.com/blog/xxxxx 的请求都重定向到 wordpress 实例,而所有其他请求(例如 mysite.com/xxxx/yyyy)都重定向到我的节点实例http://本地主机:4000/xxxxx/yyyy
我的配置文件如下所示
9 <VirtualHost *:80>
10
11 # Admin email, Server Name (domain name) and any aliases
12 ServerAdmin xxxxx
13 ServerName xxxxx
14 ServerAlias xxxxx
15
16
17 # Index file and Document Root (where the public files are located)
18 DirectoryIndex index.html index.php
19 DocumentRoot /xxx/xxx/public_html/xxx/public
.....
26 <Location />
?? What goes here?
31 </Location>
......
33 <Location /blog>
34 RewriteEngine On
35 RewriteBase /blog/
36 RewriteRule ^index\.php$ - [L]
37 RewriteCond %{REQUEST_FILENAME} !-f
38 RewriteCond %{REQUEST_FILENAME} !-d
39 RewriteRule . /blog/index.php [L]
40 </Location>
我尝试设置重写规则和代理,但博客不起作用,或者主页不起作用。
答案1
我相信(尽管我可能错了)Apache<Location>
按顺序处理标签,因此如果你想映射 /blog 的子文件夹,你需要执行
<Location /blog>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</Location>
ProxyPass / http://localhost:4000/
ProxyPassReverse / http://localhost:4000/
答案2
尝试输入以下几行后你的<Location /blog>...</Location>
部分:
ProxyPass / http://localhost:4000/
ProxyPassReverse / http://localhost:4000/
我不再十分清楚位置和代理指令之间的匹配是如何进行的。但对于代理指令,它们只遵循按顺序、先匹配的原则。