我有一个非常基本的两页网站:主页和一个关于页面.我正在尝试使用htaccess重写URL,以便显示为:
> domain.com/(用于主页)
> domain.com/about(关于页面)
在站点的实际文件夹结构中,主页是/index.php,关于页面是/about.php(均显示在根目录中).
我一直在研究使用别名的方法,但不幸的是,我的主机(Dreamhost)不允许访问httpd.config,因此不在窗口内,我只能在htaccess文件中使用重写规则.
由于index.php文件将自动显示在域根目录(http://domain.com/)中,因此到目前为止,我设法使用以下几行使about页面正确显示在domain.com/about上:
RewriteEngine On
RewriteRule ^about$/about.php
我还使用301重定向,例如,domain.com/about/(带有斜杠)也可以直接重定向回/ about URL,如下所示:
Redirect 301 /about/ http://domain.com/about
这很好.
但是,index.php和about.php文件仍会显示您是否在浏览器中转到了正确的URL(例如:domain.com/about.php),因此搜索引擎看到了(并建立索引)两个版本的每页!我已经在每个页面中设置了正确的规范元数据,但这似乎没有任何效果(自该网站上线以来,规范元数据一直存在于页面标记中).
因此,我该如何首先对这两个文件进行“盲目”重写(需要一个更专业的术语),以便使URL看起来正确,而且有效地“阻止”对文件的直接访问-确保有人要尝试直接访问php文件,URL仍会以“漂亮”版本而不是完整的文件名和php扩展名出现在访问者的浏览器中?
任何建议都将不胜感激,我已经再研究了几天(我认为这里的任何地方都没有与之完全相同的东西),并且我一生都无法解决这个问题!
解决方法:
在PHP文件中检查$_SERVER['REQUEST_URI']
.如果其中包含文件名(而不是所需的URI),请执行301或404或任何您想要的操作.否则照常提供页面.
您也可以
RewriteRule ^about.php - [L,gone]
要么
RewriteRule ^about.php /about [L,R=301]
但这必须先于其他RewriteRules.如果通过/about.php访问该页面,它将发送410消失或301移动永久响应.有关mod_rewrite的完整文档,请参见Apache Module mod_rewrite.