.htaccess绑定域名到子目录
利用.htaccess绑定主域名到子目录并解决与wordpress的冲突
刚跟朋友们在国外合租了一台Linux主机,速度不错,就是要把博客迁移过来费了点劲,碰到个问题是我的博客是放在blog目录下,我不想通过http://www.gafish.net/blog/来访问,希望是http://www.gafish.net/就能直接访问到blog,但地址又不显示出来,通过百度,找到了合理的解决方案。
利用Linux主机的.htaccess文件重定向网址功能,操作如下:
把如下代码用记事本记下
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?gafish\.net$
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blog/$1
RewriteCond %{HTTP_HOST} ^(www.)?gafish.net$
RewriteRule ^(/)?$ blog/index.php [L]
</IfModule>
保存为文件名是 .htaccess 的无格式文件,上传到服务器根目录下,再打开http://www.gafish.net/ ,非常成功,我很满意。
这时新的问题也冒出来了,我的博客用了伪静态网址,wordpress生成的规则也在.htaccess文件中,代码如下:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
这个规则跟我的主域名跳转规则有冲突,于是我把这段代码剪贴出来保存成一个新的.htaccess文件放到/blog/目录下,再打开博客,非常OK,问题解决。
---------------------
首先得把域名绑定绑定了,比如把dev.ccvita.com解析到211.136.108.190这个IP
其次是在网站管理面板里,为网站绑定dev.ccvita.com
最后编辑配置.htaccess文件,就可以了。如果没有开启.htaccess请访问下面的内容,《Apache之AllowOverride参数详解》:http://www.ccvita.com/281.html
.htaccess文件内容
RewriteEngine on
# 把 ccvita.com 改为你要绑定的域名.
RewriteCond %{HTTP_HOST} ^(www.)?ccvita.com$
# 把 subfolder 改为要绑定的目录.
RewriteCond %{REQUEST_URI} !^/subfolder/
# 不要改以下两行.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 把 dev 改为要绑定的目录.
RewriteRule ^(.*)$ /dev/$1
# 把 ccvita.com 改为你要绑定的域名
# 把 dev 改为要绑定的目录.
# dev/ 后面是首页文件index.php, index.html
RewriteCond %{HTTP_HOST} ^(www.)?ccvita.com$
RewriteRule ^(/)?$ dev/index.php [L]
-----------------------
有些美国空间,可以做多个子站点,但只能做一个主站。可以用.htaccess实现域名绑定到子目录实现多站点。
Apache之AllowOverride参数详解
通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override,即:
< Directory /> AllowOverride None < /Directory> |
在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中。
而对于 URL rewrite 来说,至少需要把目录设置为:
< Directory /myblogroot/> AllowOverride FileInfo < /Directory> |
而对于 URL rewrite 来说,至少需要把目录设置为:
AllowOverride的参数:
AuthConfig
允许使用与认证授权相关的指令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, 等)。
FileInfo
允许使用控制文档类型的指令(DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, mod_mime中的 Add* 和 Remove* 指令等等)、控制文档元数据的指令(Header, RequestHeader, SetEnvIf, SetEnvIfNoCase, BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName)、mod_rewrite中的指令(RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule)和mod_actions中的Action指令。
Indexes
允许使用控制目录索引的指令(AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, 等)。
Limit
允许使用控制主机访问的指令(Allow, Deny, Order)。
Options[=Option,...]
允许使用控制指定目录功能的指令(Options和XBitHack)。可以在等号后面附加一个逗号分隔的(无空格的)Options选项列表,用来控制允许Options指令使用哪些选项。
------------------------------------
将 WordPress 文件置于独立子目录,同时让访客可以通过根目录访问到
很多人希望在根目录(比如 http://example.com)使用 WordPress,但又不希望让 WordPress 将他们的根目录弄乱。因此,WordPress 允许您在子目录中安装 WordPress,但让访客可以通过根目录访问到它。
本方法核心原理是采用了index.php重定向,因此不支持多站点,如下内容对于启用了多站点的用户无效。
将 WordPress 移动到专门的子目录的步骤如下:
- 创建用于存放 WordPress 文件的新目录(在本文中将使用 /wordpress 作为例子)。若您在 Linux 上,在 www 目录中运行 mkdir wordpress 命令。您大概还需要运行一次“chown apache:apache”或“chown [您的用户名]:www-data”来使它拥有正确的所有者。
- 前往常规设置页面。
- 在“WordPress 地址(URL)”处,将其修改为您的 WordPress 核心文件的新位置。例如:http://example.com/wordpress
- 在“站点地址(URL)”一栏,保留您原来根目录的位置。如:http://example.com
- 点击“保存设置”。(别担心此时看到的错误消息,也不要现在进行测试!不然您大概会得到“文件未找到”之类的错误消息。)
- 将您的 WordPress 核心文件移动(剪切)至新位置(刚刚填写的“WordPress 地址”)。
- 从您的 WordPress 地址复制(不要剪切!)index.php 和 .htaccess 到根目录(刚刚填写的“站点地址”)。您可能看不到.htaccess 文件,因此您需要设置您的 FTP 客户端,令其显示隐藏的文件。若您没有使用固定链接,那您可能没有 .htaccess文件,请直接进行下一步。若您在 Windows(IIS)服务器上运行 WordPress,同时使用了固定链接,那您也不会有.htaccess,但有 web.config 文件。和上述方法一样,请复制 index.php 到站点的根目录,然后移动(剪切!不是复制!)web.config 到您的根目录。
- 使用一个文本编辑器来打开根目录的 index.php。
-
进行如下更改,然后保存文件。更改这行:
require('./wp-blog-header.php');
令其变成(请用您自己的目录名替换“wordpress”):
require('./wordpress/wp-blog-header.php'); // 核心原理是采用了index.php重定向,因此不支持多站点 - 在新位置登录。比如 http://example.com/wordpress/wp-admin/ // 每次登陆需要手动添加 /wordpress
- 若您设置了固定链接,请前往“固定链接”管理页面保存一次设置。此时,若有足够的权限,WordPress 会自动为您更新.htaccess 文件。若自动写入失败,页面上会自动显示新的重写(rewrite)条目,请手动编辑您的 .htaccess 文件(和主index.php 在同一个目录下)
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2014-03-19 23:57:27
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: .htaccess绑定域名到子目录 (米扑博客)