【问题标题】:mod_rewrite Adds .php Extension When Accessing Site Without www. Prefixmod_rewrite 在访问没有 www 的站点时添加 .php 扩展名。字首
【发布时间】:2012-06-28 23:20:52
【问题描述】:

我的.htaccess文件如下:

Options -Multiviews
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php

我遇到的问题是,当我尝试在没有 www 的情况下访问我的网站时。前缀,.php 扩展名被添加到地址,这通常会导致问题。例如,如果我尝试使用地址 example.com 访问我的主页,该地址将转换为 www.example.com/.php。我要万维网。要添加,但最后添加的 .php 扩展名只会导致错误。我该如何解决这个问题?

【问题讨论】:

    标签: php apache .htaccess


    【解决方案1】:

    从 .htaccess 中删除以下行并尝试..

    RewriteRule ^(.*)$ $1.php
    

    【讨论】:

      【解决方案2】:

      我相信问题出在你的最后一行。执行第一条规则后,Mod Rewrite 不会停止。尝试将最后一个规则修饰符添加到重定向规则:

      RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
      

      【讨论】:

      • 如果我添加 L,我如何让 mysite.com/main 之类的内容解析为 www.mysite.com/main.php?停在上面一行不会阻止 .php 被解析吗?
      • 第 4 行的 RewriteRule 处于 RewriteCond 之下,因此除非该条件通过,否则它不会触发。因此,在从 example.com 重定向到 www.example.com 之后,该规则将被跳过。
      【解决方案3】:

      你需要告诉 apache 在 301 重定向之后停止处理规则,通过添加一个 L 来做到这一点 - 例如:

      RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
      

      除此之外:如果您在第一行启用多视图并删除最后 3 行,您会做得更好;)

      【讨论】:

      • 比较你的第4行和上面的行,你应该看到添加的L
      • 对不起,我是想问我是怎么做到的:“如果你在第一行启用多视图,并删除最后 3 行,你会过得更好”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 2011-08-14
      • 2020-06-29
      • 2012-12-11
      相关资源
      最近更新 更多