【问题标题】:mod_rewrite Adds .php Extensionmod_rewrite 添加 .php 扩展名
【发布时间】:2012-06-20 16:52:39
【问题描述】:

我的.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 扩展名只会导致错误。我该如何解决这个问题?

【问题讨论】:

  • 这是不安全的重写方式"/x"->"/x.php"
  • RewriteRule 无法更改浏览器地址栏中的 URL。您需要 [R](重定向)标志将浏览器重定向到新的 URL。
  • 什么是删除 php 扩展?
  • Jon Lin 提出的好问题,当您没有 RewriteRule 可以做到这一点时,如何在 ~any~ 的情况下将 php 从地址栏中“删除”。如果您首先关闭 .php,您的规则将只允许访问 .php 文件。
  • 那么我如何让它删除 php?如果我尝试在没有 www 的情况下访问我的网站,为什么会自动添加 .php 扩展名。前缀?

标签: php apache .htaccess


【解决方案1】:

RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

去掉[R=301,L]中的L,意思是“Last”,意思是“在这个之后停止处理RewriteRules”。

301 也意味着“永久重定向”。在这种情况下,您的浏览器会记住永久重定向。您是否有可能拥有一个版本的重写规则,转到您的 URL,然后更改它?清除缓存或尝试其他浏览器。

【讨论】:

  • 我试过这样做,但没有奏效。问题仍然存在:当我进入 mysite.com/main 时,我会立即转到 www.mystie.com/main.php,但我不想要那个 .php 扩展名。
  • 编辑了我的答案。注意 301,重定向可能会缓存在您的浏览器中。
  • 感谢您的帮助。我尝试了三种不同的浏览器并清除了所有浏览器的缓存,但仍然遇到同样的问题。
【解决方案2】:

文件第 4 行的“L”标志表示“最后一个”,即不再处理任何规则。尝试删除 L。

【讨论】:

  • 我试过这样做,但没有奏效。问题仍然存在:当我进入 mysite.com/main 时,我会立即转到 www.mystie.com/main.php,但我不想要那个 .php 扩展名。
猜你喜欢
  • 2013-10-11
  • 2011-09-08
  • 2016-05-28
  • 2012-06-28
  • 2011-08-14
  • 1970-01-01
  • 2013-04-20
  • 2021-07-19
  • 2021-04-07
相关资源
最近更新 更多