使用 .htaccess 隐藏 .php 文件的位置和扩展名

使用 .htaccess 隐藏 .php 文件的位置和扩展名

我正在尝试让所有请求//my.domain/download?id=xx(无论是 http 还是 https)都由 处理/path/to/my/download.php?id=xx

我尝试了各种RewriteRule规则都无济于事,所以发布任何内容都没有意义,但这是一个Wordpress安装,所以这不应该与 WP 现有的规则相冲突,这些规则是:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

我将非常感激您对任何答案的解释。谢谢!

编辑

我已经看过了在 Apache 中重定向、更改 URL 或将 HTTP 重定向到 HTTPS - 您想了解但又不敢问的有关 Mod_Rewrite 规则的一切甚至无法确定哪一节涵盖了这种情况,因为这些都太笼统了。我正在寻找有关这种具体情况的帮助。

编辑2

这是失败的代码,出现 404,即使https://htaccess.madewithlove.be/说一切都应该很好:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^download
RewriteRule ^download(.*)$ wp-content/themes/XXX/inc/download.php$1

编辑3 我遇到了不相关的问题。对于其他感兴趣的人,请参阅下面的回答,了解有效的规则。

答案1

我正在尝试让所有请求//my.domain/download?id=xx(无论是 http 还是 https)都由 处理/path/to/my/download.php?id=xx

为此你可能想要内部重写URL 而不是像现有答案那样从外部重定向请求。内部重写不会更改浏览器地址栏中的 URL。

您现有答案中的指令也可以简化。

请尝试以下方法,现有的 WordPress 指令,以便改写/download?id=N任何对 的请求/path/to/my/download.php?id=N,其中N是 1 位或多位数字。

RewriteCond %{QUERY_STRING} ^id=\d+$
RewriteRule ^download$ path/to/my/download.php [L]

\d是匹配任意数字的简写字符类。与 相同[0-9]+量词匹配 1 个或多个数字id=,因此如果查询字符串中包含(没有值),则此操作将失败(404) 。*如果id=应该成功,则改回。无需捕获此值(即用括号将模式括起来,([0-9]*)因为您没有在中使用它代换

查询字符串,即被id=N复制到代换默认情况下。

没有必要重复该RewriteEngine On指令,因为这已经是 WordPress 代码块的一部分。

答案2

这是实现所要求功能的代码:

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/download$
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule ^download(.*)$ path/to/my/download.php$1 [L,R]

相关内容