URL重写 - 没有文件扩展名的重定向

时间:2009-03-25 12:19:17

标签: apache .htaccess friendly-url url-rewriting

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

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

这很有效,可以确保/myfile.phpmyfile一样有效(在网址中没有扩展名)。它还可以毫无问题地处理查询字符串,因此myfile?var=foo也可以。

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

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

4 个答案:

答案 0 :(得分:2)

尝试使用此规则重定向.php个文件的请求:

RewriteCond %{THE_REQUEST} ^GET\ /(([^/?]*/)*[^/?]+)\.php
RewriteRule ^.+\.php$ /%1 [L,R=301]

答案 1 :(得分:2)

你能改变你的最后一次RewriteRule吗?

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

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

此外,您还可以使用规则调整Google Analytics内部的内容。虽然这可能不是一个理想的解决方案。

ETA :如果您希望myfile.php重定向到myfile,请尝试将其替换为上一条规则:

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

答案 2 :(得分:1)

您可以在页面中添加

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

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

答案 3 :(得分: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