我正在尝试让所有请求//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]