2011-08-25 98 views
0

我的大学给了我一个有限制选项的免费博客。这是可移动的类型,我无法通过MT界面编辑URL。在共享主机环境中通过.htaccess重写URL

他们建议我把一个index.html页面向上做一个meta重定向到我的博客的完整URL。相反,我想在.htaccess文件中使用mod_rewrite来掩盖它。

我怎样才能改变这个网址:

http://www.personal.mycollege.edu/myuserid/blogs/my_blog/ 

要刚:

http://www.personal.mycollege.edu/myuserid/ 

另外,我怎样才能得到它结束物品等持续性,整个网站?

+0

1)你在哪里(哪个文件夹)打算放这样的.htaccess?我认为它会在'/ myuserid/.htaccess'中? 2)其他网址应该如何路由(例如'/ myuserid/blogs/my_blog/some-article' - 它应该如何重写?)3)'/ myuserid /' - 它是一个真实的物理文件夹..或者它也被重写了.htaccess(顶层)? 4)你真的可以在该服务器上使用.htaccess和mod_rewrite吗?请你仔细检查一下。 – LazyOne

+0

我可以在此服务器上使用.htaccess。我通过一个简单的测试来验证。 /myuserid /是一个真正的文件夹,我将放置.htaccess。 我真的不确定网址是如何形成的,只要发布。静态页面是page_name.htm – Aaa

+0

我的意思是 - 重写一个URL不是一个问题,但其余的呢? – LazyOne

回答

0

要重写(内部重定向)/myuserid//myuserid/blogs/my_blog/同时具有在位于/myuserid/文件夹的.htaccess这个规则,使用这样的规则:

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^$ blogs/my_blog/ [L] 

如果添加略低于上面这条规则,你应该重写文章等,以及:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(?!blogs/my_blog/)(.+)$ blogs/my_blog/$1 [L] 

以上规则将只重写不存在的网址(我认为这是一个正确的做法 - 如果你认为否则只是删除2条的RewriteCond线)。这意味着如果请求/myuserid/hello.png且文件存在,则不会将其重写为/myuserid/blogs/my_blog/hello.png


在理论上可以这条规则组合成一个单一的一个(由(.*)更换(.+)),但由于一些奇怪的原因,它不工作(或工作不正常)在某些服务器上。在任何情况下 - 那就是:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(?!blogs/my_blog/)(.*)$ blogs/my_blog/$1 [L] 

另外,我怎样才能得到它结束篇执着,等等,整个 网站?

这是一个非常具体的问题,不知道很多关于如何生成链接等的细节我不能给你一个明确的答案。

有可能使用某种ReverseProxy来完成这项工作 - 而不是仅仅重写使用内部代理的东西 - 它对用户来说是完全透明的(与重写相同),但应该能够修复链接从真实到漂亮的页面。不幸的是,我对这个特定主题的了解非常有限,无法给您提供任何实例。

+0

@Aaa所以..这是否适合你?如果是,请考虑将此答案标记为已接受。 – LazyOne