2011-02-07 64 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