【问题标题】:Hiding .php in URL breaks contact form [closed]在 URL 中隐藏 .php 会破坏联系表单 [关闭]
【发布时间】:2021-04-01 12:29:28
【问题描述】:

我有一个功能齐全的网站,其中包含许多不同的联系表格。

我使用 .htaccess 文件将 .php 隐藏在 URL 中每个页面名称的末尾,但是当我这样做时,联系表格会中断。还有其他隐藏这些后缀的方法吗?

非常感谢

【问题讨论】:

  • 通过编辑问题显示您的 .htaccess。您的表单是否使用POST 方法?
  • 是的,使用 POST。下面是htaccess文件: RewriteEngine on RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC] RewriteRule ^ /%1 [NC,L,R] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_URI}.php [NC,L]
  • 请“编辑您的问题”(如 anubhava 建议的那样)添加您的 .htaccess 文件的内容。在评论中发布未格式化的代码(尤其是正则表达式)可能会忽略显示中的特殊字符并使代码示例无用。
  • 还有,“联系表”是怎么调用的,终点是什么?

标签: php apache .htaccess mod-rewrite


【解决方案1】:

您应该跳过来自重定向规则的POST 请求,如下所示:

RewriteEngine On

RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]

RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

现代浏览器支持HTTP status code 308,不会将POST请求更改为GET,因此您可以使用第一条规则:

RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=308,NE,L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多