【问题标题】:Rewrite all queries to not need the .php extension using a mod_rewrite RewriteRule使用 mod_rewrite RewriteRule 重写所有查询以不需要 .php 扩展名
【发布时间】:2010-09-16 02:00:05
【问题描述】:

我想要所有类似的查询

http://mysite.com/something/otherthing?foo=bar&x=y

改写为

http://mysite.com/something/otherthing.php?foo=bar&x=y

换句话说,只需将 .php 扩展名设为可选,通用。

【问题讨论】:

    标签: php url mod-rewrite friendly-url


    【解决方案1】:

    我会这样做。基本上,如果文件不存在,请尝试将 .php 添加到其中。

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ $1.php [QSA,L]
    

    【讨论】:

    • 这就是我现在正在做的事情。完美的。谢谢!
    • 所以这表示如果访问的资源不是文件或目录,它将执行RewriteRule?
    【解决方案2】:

    只匹配没有扩展名的路径:

    RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php
    

    编辑:在我的测试中,查询字符串会自动传递。如果没有,您可以改用它:

    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1
    

    【讨论】:

    • [QSA, L] 传递查询字符串(L 表示在此之后不处理规则)。
    【解决方案3】:

    这行得通:

    RewriteCond %{QUERY_STRING} ^.+$
    RewriteRule ^/?([^/\.]+)$ /$1.php [L]
    

    这个想法是确保有一个查询字符串(问号加东西),如果有,检查问号之前的东西是否没有扩展名,如果有,附加 .php。

    【讨论】:

      【解决方案4】:

      如果你可以更改httpd.conf和什么,你也可以把:

      ForceType application/x-httpd-php
      

      在文件中,因为它将强制所有调用的路径都是 PHP 文件。我认为这也适用于查询字符串。

      【讨论】:

        【解决方案5】:

        类似...

        RewriteRule /something/(.+)?(.+) /something/$1.php?$2
        

        可能会起作用。

        【讨论】:

        • 你可能需要用反斜杠转义问号
        • 我试过了。我认为查询字符串的内容不属于 RewriteRule 中匹配的内容。您必须对查询字符串执行单独的 RewriteCond。看我的回答。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        相关资源
        最近更新 更多