.htaccess - htaccess 总是删除 .php 但保留查询字符串 (AJAX)
问题描述
在一个网站上,出于美化原因,我想从 URL 中删除所有 .php 文件扩展名。
我在网上找到的大多数 RewriteRules 只从 /site 重写,而不是从 /site.php 重写到 /site。
我像这样解决了这个问题,效果很好。如果用户现在在浏览器中键入 /site.php,它会自动将其重写为 /site。伟大的!
但是现在我的 Ajax 不再工作了,因为查询字符串既没有保存在 /site 也没有保存在 /site.php。
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1?%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]
我尝试将?%1添加到第一个 RewriteCond:
RewriteCond %{THE_REQUEST} /([^.]+)\.php?%1 [NC]
RewriteRule ^ /%1?%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]
Ajax 调用再次起作用,但现在 /site.php 仍然是 /site.php。
如何在我的 RewriteCond 中同时拥有这两个功能?
解决方案
您可以在站点根目录 .htaccess 中使用这些规则:
RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]
这将保留查询字符串。
推荐阅读
- google-cloud-platform - 如何将 PubSub Push 订阅与 VPC Service Controls 结合使用?
- python - 如何使用 Python 在 Plotly express 中制作水平直方图?
- docker - github 操作:buildx 调用因 gradle 和 docker-push 操作而失败
- django - Django:随时随地附加结果
- javascript - 在 React JS 中根据 JSDiff 更改 CSS
- ruby-on-rails - GraphQL-Ruby。时间类型
- python - tensorflow/keras 中的自定义层 - 这两个选项是否相等?
- android - 在第一次滚动时滞后于 RecyclerView
- homebrew - 通过自制软件安装的传输 cli 位于“settings.json”所在的位置
- python - pytorch 自定义乌尔都语数据加载器(文本和图像)