2011-02-07 69 views
3

我有一個非常基本的雙頁網站:主頁和關於頁面。我正在試圖做的是使用的htaccess重寫URL,這樣的表現爲:htaccess中的別名,並阻止訪問原始文件? (URL重寫)

  • domain.com/(在主頁)
  • domain.com/about(用於關於頁面)

在網站的實際文件夾結構中,主頁是/index.php,關於頁面是/about.php(都出現在根目錄中)。

我一直在研究使用別名,但不幸的是我的主機(Dreamhost)不允許訪問httpd.config,因此不在窗口中,而是在htaccess文件中使用重寫規則。

由於index.php文件會自動顯示在域根目錄(http://domain.com/)中,所以我至今設法使關於頁面正確顯示在domain.com/about使用這些行:

RewriteEngine On 
RewriteRule ^about$ /about.php 

我還使用301重定向,以便例如,domain.com/about/(與結尾的斜線)還指示回/約URL是這樣的:

Redirect 301 /about/ http://domain.com/about 

這很好。

然而在index.php和about.php文件仍然還顯示,如果你去到正確的網址瀏覽器中(例如:domain.com/about.php),從而導致搜索引擎查看(並索引)每個頁面的兩個版本!我已經在每個頁面中設置了正確的規範化元數據,但這似乎沒有任何效果(規範元數據自網站上線以來一直在頁面標記內)。

因此,如何首先對這兩個文件進行'盲'重寫(因爲需要更專業的術語),以便URL看起來正確,而且還有效'阻止'直接訪問文件 - 確保如果有人試圖直接訪問php文件,那麼這個URL仍然會出現在訪問者的瀏覽器中,而不是完整的文件名和php擴展名?

任何意見都將非常感激,我一直在研究這再過兩天了(我不認爲這裏有什麼和這裏任何地方相同),並且不能爲我的生活工作這個一出!

回答

3

在PHP文件中檢查$_SERVER['REQUEST_URI']。如果它包含文件名(而不是你想要的URI),那麼做一個301或404或任何你想要的。像往常一樣服務頁面。

你也可以做一個

RewriteRule ^about.php - [L,gone] 

RewriteRule ^about.php /about [L,R=301] 

但這之前,你的其他RewriteRule s到去。如果通過/about.php訪問頁面,它將發送410 Gone301 Moved Permanently響應。有關mod_rewrite的完整文檔,請參閱Apache Module mod_rewrite

+0

哇,這很快!並且謝謝 - 我一直非常專注於使用htaccess作爲httpd.conf的替代品,我甚至沒有考慮過使用php本身。很棒! – johnkavanagh 2011-02-07 20:43:38