You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DreamHost主机上RewriteRule的[P]标记失效问题及解决方法

DreamHost上WordPress伪静态RewriteRule [P]标记失效问题及解决办法

问题背景

我在DreamHost托管的WordPress站点里,有一个名为profile的页面,使用自定义模板接收URL参数,原始访问URL格式为:

http://www.example.com/profile?profileSubject=subject1

我希望通过.htaccess中的RewriteRule实现更友好的URL形式:

http://www.example.com/profile/subject1

尝试的规则及遇到的问题

我编写了如下RewriteRule规则:

RewriteRule ^profile/([^/]*)/? http://www.example.com/profile?profileSubject=$1 [P,L]

该规则能正确加载目标内容,但地址栏的URL会自动跳转为profile?profileSubject=subject1。而在本地服务器的同站点.htaccess中使用相同规则时,[P](代理标记)可以正常工作,地址栏URL能保持为/profile/subject1。由此推测DreamHost环境下[P]标记存在失效问题。

本地测试的重写日志

[Fri Nov 25 14:37:29.213969 2022] [rewrite:trace3] [pid 1427] mod_rewrite.c(476): [client 127.0.0.1:60404] 127.0.0.1 - - [127.0.0.1/sid#7faf94036ef8][rid#7faf948656a0/initial] [perdir /Users/me/Sites/wordpress/] add path info postfix: /Users/me/Sites/wordpress/profile -> /Users/me/Sites/wordpress/profile/javonte-green
[Fri Nov 25 14:37:29.214037 2022] [rewrite:trace3] [pid 1427] mod_rewrite.c(476): [client 127.0.0.1:60404] 127.0.0.1 - - [127.0.0.1/sid#7faf94036ef8][rid#7faf948656a0/initial] [perdir /Users/me/Sites/wordpress/] strip per-dir prefix: /Users/me/Sites/wordpress/profile/javonte-green -> profile/javonte-green
[Fri Nov 25 14:37:29.214042 2022] [rewrite:trace3] [pid 1427] mod_rewrite.c(476): [client 127.0.0.1:60404] 127.0.0.1 - - [127.0.0.1/sid#7faf94036ef8][rid#7faf948656a0/initial] [perdir /Users/me/Sites/wordpress/] applying pattern '^/?profile/(.+)$' to uri 'profile/javonte-green'
[Fri Nov 25 14:37:29.214050 2022] [rewrite:trace2] [pid 1427] mod_rewrite.c(476): [client 127.0.0.1:60404] 127.0.0.1 - - [127.0.0.1/sid#7faf94036ef8][rid#7faf948656a0/initial] [perdir /Users/me/Sites/wordpress/] rewrite 'profile/javonte-green' -> '/profile?profileSubject=javonte-green'
[Fri Nov 25 14:37:29.214056 2022] [rewrite:trace3] [pid 1427] mod_rewrite.c(476): [client 127.0.0.1:60404] 127.0.0.1 - - [127.0.0.1/sid#7faf94036ef8][rid#7faf948656a0/initial] split uri=/profile?profileSubject=javonte-green -> uri=/profile, args=profileSubject=javonte-green
[Fri Nov 25 14:37:29.214062 2022] [rewrite:trace2] [pid 1427] mod_rewrite.c(476): [client 127.0.0.1:60404] 127.0.0.1 - - [127.0.0.1/sid#7faf94036ef8][rid#7faf948656a0/initial] [perdir /Users/me/Sites/wordpress/] trying to replace prefix /Users/me/Sites/wordpress/ with /~me/wordpress/
[Fri Nov 25 14:37:29.214067 2022] [rewrite:trace2] [pid 1427] mod_rewrite.c(476): [client 127.0.0.1:60404] 127.0.0.1 - - [127.0.0.1/sid#7faf94036ef8][rid#7faf948656a0/initial] [perdir /Users/me/Sites/wordpress/] trying to replace context docroot /Users/me/Sites with context prefix /~me
[Fri Nov 25 14:37:29.214071 2022] [rewrite:trace1] [pid 1427] mod_rewrite.c(476): [client 127.0.0.1:60404] 127.0.0.1 - - [127.0.0.1/sid#7faf94036ef8][rid#7faf948656a0/initial] [perdir /Users/me/Sites/wordpress/] internal redirect with /profile [INTERNAL REDIRECT]

最终解决方案

放弃直接代理到profile页面的方式,改为通过WordPress的index.php转发请求,使用如下规则:

RewriteEngine On
RewriteRule ^/?profile/(.+)$ /index.php?pagename=profile&profileSubject=$1 [QSA]

此规则可以正确加载目标内容,同时地址栏URL保持/profile/subject1不变。

内容的提问来源于stack exchange,提问作者namkcuR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:05:23