服务器仅在一个URL上强制执行斜杠

时间:2017-01-20 20:50:23

标签: apache .htaccess mod-rewrite caching

我的.htaccess有一个重写,从URL中删除.php,以便:

http://example.com/page.php更改为http://example.com/page

这个问题已经好多年了,直到我需要更改文件的名称。现在发生这种情况:

http://example.com/newpage更改为http://example.com/newpage/并引发403错误。

这里的重写适用于其他一切:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^\.]+)$ $1.php [NC,L]

我确定这是某种类型的缓存问题,结合默认情况下Apache添加了一个斜杠,但我无法弄清楚缓存发生的位置,我也不想转向出于安全原因关闭Apache的斜杠(加上,我不应该)。

因为你会问:

  1. 我使用cPanel VPS和Centos 5. Apache 2.2和PHP 5.4。

  2. cPanel似乎没有办法清除Apache缓存。 htcacheclean不在那里,我不想安装它以防它用cPanel搞砸了。

  3. 是的,我通过浏览器缓存清除了。尝试了一个新的浏览器。试了一台新电脑。

  4. 文件名正确无误。如果我将网址更改为http://example.com/newpage.php,则可以正常使用。

  5. 自从我做出初步改变以来已经过了四个小时。

  6. 尝试重启服务器。

  7. 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

要使用.htaccess删除尾部斜杠,您可以使用以下内容:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [R=301,L]

它应该可以解决您遇到的错误。