【问题标题】:Server is forcing trailing slash on only one URL服务器仅在一个 URL 上强制使用斜杠
【发布时间】:2017-01-21 05:33:10
【问题描述】:

我的 .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. 我正在使用带有 Centos 5 的 cPanel VPS。Apache 2.2 和 PHP 5.4。

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

  3. 是的,我已被浏览器缓存清除。尝试了新的浏览器。试了新电脑。

  4. 文件名正确。如果我将 URL 更改为 http://example.com/newpage.php 它工作正常。

  5. 我进行初始更改已经四个小时了。

  6. 尝试重新启动服务器。

有什么想法吗?

【问题讨论】:

  • 没有同名文件夹?
  • $%@$$% 的儿子!是的!这就是问题所在。我不确定是谁把那个文件夹放在那里的,但它甚至什么都没有。非常感谢!
  • 不客气,很高兴能帮上一点忙。

标签: apache .htaccess mod-rewrite caching


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2022-01-13
    • 2021-12-06
    • 1970-01-01
    相关资源
    最近更新 更多