我想通过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副本 - 一个用于本地,一个用于真实域。
答案 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。