使用 apache 进行多个自定义重定向

使用 apache 进行多个自定义重定向

我想使用 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/

我不再十分清楚位置和代理指令之间的匹配是如何进行的。但对于代理指令,它们只遵循按顺序、先匹配的原则。

相关内容