3

我目前在 .htaccess 文件中使用以下规则:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

这很好地确保了它的/myfile.php正常工作myfile(在 URL 中没有扩展名)。它还可以毫无问题地处理查询字符串,因此myfile?var=foo也可以。

问题是这些在 Google Analytics 中注册为两个单独的文件。因此,虽然myfile.php可能是我网站上第三受欢迎的页面,有 X 次访问,但myfile可能是我网站上第五受欢迎的页面,有 Y 次访问。

如何进行硬重定向,而不是“接受任何一种”类型的规则?

4

4 回答 4

2

试试这个规则来重定向.php文件请求:

RewriteCond %{THE_REQUEST} ^GET\ /(([^/?]*/)*[^/?]+)\.php
RewriteRule ^.+\.php$ /%1 [L,R=301]
于 2009-03-25T12:21:05.847 回答
2

你能改变你的最后一个 RewriteRule 来做到这一点吗?

RewriteRule ^(.*)$ $1.php [L,R=301]

这会将“myfile”重定向到“myfile.php”。

此外,您也可以使用规则在 Google Analytics 内部对此进行调整。尽管这可能不是一个理想的解决方案。

ETA:如果您希望 myfile.php 重定向到 myfile,请尝试将此作为您的最后一条规则:

RewriteRule ^(.+)\.php$ $1 [L,R=301]
于 2009-03-25T15:20:57.803 回答
1

你可以在你的页面中放一个

<link rel="canonical" href="..." />

https://support.google.com/webmasters/answer/139066?hl=en

于 2014-07-17T14:12:39.577 回答
0

花了我几个小时......但我相信我终于找到了答案。

// The Original
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

// Add This
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.php /$1 [R=301,L]

在这里找到:http ://www.webmasterworld.com/apache/3961636.htm

于 2012-04-07T04:18:31.723 回答