2011-08-25 99 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