.htaccess RewriteRule [P]标志在DreamHost上似乎不起作用,有什么原因吗?

zsbz8rwp  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(152)

我正在DreamHost上的一个wordpress网站上工作。wordpress网站上有一个页面,它有一个存根“profile”,并使用了一个自定义模板,该模板带有一个URL参数。URL的一个示例是:

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

我在htaccess文件中编写了一个RewriteRule,这样我就可以键入如下的url:

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

htaccess文件中的RewriteRule如下所示:

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

只要输入/profile/subject 1 URL就可以正确加载内容,但是地址栏中的URL会变成profile?profileSubject= subject 1 URL。我相信这就是P标志(即代理)的作用,阻止地址栏中的URL发生变化。
我的本地服务器上正好也有一个我正在处理的站点的副本,所以我尝试在本地服务器的htaccess文件中放入完全相同的行,P标志在那里起作用了,当内容被加载时,地址栏中的URL仍然是/profile/subject 1。
所以,我的结论是,由于某种原因,P标志在Dreamhost上不起作用,我只是想知道是否还有其他人遇到过类似的问题和/或我能做些什么。

fwzugrvs

fwzugrvs1#

正如@CBroe在问题的注解中指出的,代理模块必须在http服务器中启用,P标志才可用。虽然我不明白在适当的情况下,你描述的结果是如何发生的。也许你有其他的,额外的规则来负责你观察到的重定向?
你为什么要使用代理模块来做这个?这意味着每次都有一个完整的额外请求。而且从你的描述来看我似乎没有必要。
为什么不使用简单的内部重写:

RewriteEngine on
RewriteRule ^/?profile/(.+)$ /profile?profileSubject=$1 [QSA,L]

这将使浏览器中的可见URL保持为https://www.example.com/profile/subject1,同时在内部调用资源/profile?profileSubject=subject1,无论该资源如何得到解析。

相关问题