htaccess重定向到与localhost和real domain兼容的子文件夹

时间:2017-07-20 15:12:49

标签: .htaccess redirect

我想通过htaccess将我的网址从特定的子文件夹重定向到主域名。

一种选择是使用以下规则

RewriteRule ^subfolder/(pattern)$ http://%{HTTP_HOST}/$1 [R=301,L]

适用于真实域名

redirects correctly
http://example.com/subfolder/page
to
http://example.com/page

对localhost

工作不正常
redirects
http://localhost/exmple/subfolder/page
to
http://localhost/page
instead of 
http://localhost/exmple/page

如下修改规则适用于localhost但不适用于真实域

RewriteRule ^subfolder/(pattern)$ http://%{HTTP_HOST}/example/$1 [R=301,L]

在将脚本上载到主机Web服务器之前,我使用localhost环境进行开发和测试。

请告诉我是否可以通用方式处理上述情况,这样我就不需要维护两个代码/ htaccess副本 - 一个用于本地,一个用于真实域。

1 个答案:

答案 0 :(得分:0)

最后,解决了我自己的问题。以下是如何通过仅替换输入URL的所需部分将URL重定向到新的URL - 在localhost和real domain上都有效。

Get current directory path into a variable "BASE"

RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]

Capture the desired portion of the url and redirect there

RewriteRule ^subfolder/(pattern)$ %{ENV:BASE}$1 [R=301,L]

第一部分是将当前目录的相对路径转换为变量。这里有更多detail

然后在这里捕获所需的网址部分"(模式)"并且没有任何协议或域名重定向。

将维护实际的协议,域名和查询字符串。因此适用于localhost和real domain。