Apache配置:如何新增特定路径至内部URL的重定向规则
搞定Apache重定向的步骤
嘿,这个需求很常见,我给你一步步说怎么配置:
首先得确保Apache的mod_rewrite模块是开着的,不然重定向规则没用。先跑这两条命令:
sudo a2enmod rewrite sudo systemctl restart apache2
接下来改你的虚拟主机配置文件,有两种靠谱的方式可以加规则,选哪种都行:
方式一:在现有Directory块里加规则
找到你已经有的<Directory /var/www/polo/current/public/>那块,先开启Rewrite引擎,再塞重定向规则进去就行:
<VirtualHost *:80> ServerAdmin me@mydomain.com DocumentRoot /var/www/polo/current/public <Directory /var/www/polo/current/public/> Options +FollowSymLinks +MultiViews # 先开Rewrite功能 RewriteEngine On # 核心规则:把所有/telka开头的请求转到目标地址,子路径也能带上 RewriteRule ^telka(.*)$ http://10.10.21.21/doc/test$1 [R=302,L] # 要是你确定这个重定向是永久的,把R=302改成R=301就行 # 你原来的其他配置继续保留在这里... </Directory> # 其他原有配置不动... </VirtualHost>
方式二:直接在VirtualHost根级别加规则
要是不想在Directory块里折腾,直接在VirtualHost最外层加也可以:
<VirtualHost *:80> ServerAdmin me@mydomain.com DocumentRoot /var/www/polo/current/public # 先开启Rewrite引擎 RewriteEngine On # 同样匹配所有/telka开头的请求,包括后面带的子路径 RewriteRule ^/telka(.*)$ http://10.10.21.21/doc/test$1 [R=302,L] <Directory /var/www/polo/current/public/> Options +FollowSymLinks +MultiViews # 你原来的其他配置不变... </Directory> # 其他原有配置照旧... </VirtualHost>
给你解释下规则里的关键点:
RewriteEngine On:必须先开这个,不然所有Rewrite规则都是摆设^/telka(.*)$:这个正则会抓所有以/telka开头的URL,(.*)是把/telka后面的内容都存下来,比如用户访问http://mywebsite.com/telka/abc/123,这里就会抓到/abc/123http://10.10.21.21/doc/test$1:目标地址里的$1就是把刚才抓到的子路径填进去,这样用户访问带子路径的地址也能正确跳转[R=302,L]:R=302是临时重定向,搜索引擎不会更新索引;要是这个重定向是永久的(以后不会改回来),就换成R=301;L表示这条规则匹配上之后就不用管后面的规则了,避免冲突
配置完记得重启Apache让新规则生效:
sudo systemctl restart apache2
内容的提问来源于stack exchange,提问作者wawanopoulos
相关产品推荐
相关产品推荐

