URL 重写 - 不带文件扩展名的重定向

Posted

技术标签:

【中文标题】URL 重写 - 不带文件扩展名的重定向【英文标题】:URL Rewriting - Redirect With No File Extension 【发布时间】:2010-10-15 10:39:10 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我在第一行和第二行之间添加了这个。它似乎没有任何效果。 所以如果你请求“/foo/bar.php”,你不会被重定向到“/foo/bar”? 不,它仍在加载 /foo/bar.php 我还必须移动右括号,因为在某些文件夹中使用它会剪切一个目录。【参考方案2】:

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

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

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

此外,您也可以在 Google Analytics(分析)中使用规则对此进行调整。虽然这可能不是一个理想的解决方案。

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

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

【讨论】:

这使得 .php 页面保持为 .php。没有扩展的页面从:localhost/2008/about/management到localhost/C:/Program%20Files/Apache%20Group/Apache2/htdocs/2008/… 这不是您要找的吗?还是您希望“myfile.php”重定向到“myfile”? 是的,myfile.php 到 myfile...但它不应该将 C:/Program Files 等添加到我的 URL 中。这会创建一个无效的路径。 哎呀,不知道为什么它会在你的 URL 中添加 C:/Program Files。也许你需要一个“RewriteBase /”? 我也在寻找这个答案,但在任何地方都找不到。我得到与@CoryDe​​e 相同的非功能性结果。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

// 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

【讨论】:

以上是关于URL 重写 - 不带文件扩展名的重定向的主要内容,如果未能解决你的问题,请参考以下文章

将具有单个非数字参数的动态 url 重定向到名称由参数值文本组成的静态无扩展根级 url

具有不带 .aspx 扩展名的 URL

apache_conf 重写URL以删除文件扩展名

如果 url 扩展名为 .php,则 htaccess 重写将其删除

EasyAdmin 3 - 为控制器中的重定向生成 URL(无杂物)

棘手的重定向/重写