【问题标题】:URL Rewriting - Redirect With No File ExtensionURL 重写 - 不带文件扩展名的重定向
【发布时间】: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 次访问。

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

【问题讨论】:

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


    【解决方案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/managementlocalhost/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

      【讨论】:

        猜你喜欢
        • 2018-03-02
        • 1970-01-01
        • 1970-01-01
        • 2016-10-08
        • 1970-01-01
        • 2012-03-04
        • 1970-01-01
        • 2014-01-12
        • 1970-01-01
        相关资源
        最近更新 更多