通过htaccess重写的网址屏蔽不起作用

时间:2018-10-29 08:49:28

标签: wordpress .htaccess url mod-rewrite masking

不确定这是否是Stackoverflow的正确部分以问我的问题...

但是这里是:

所以我在.htaccess文件上使用以下内容:

RewriteEngine On
RewriteRule ^sale?$ /discount-page/

因此,当人们访问example.com/sale页面时,他们会看到example.com/discount-page/的内容

但是当我访问example.com/sale时,它显示404错误,表明该服务器上没有URL /discount-page ...

为什么会这样?

这是我的整个.htaccess文件的样子:

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

# END WordPress

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

使用WordPress时,您不能简单地将.htaccess中的URL重写为%postname%(真实URL),因为WP仍会查看REQUEST_URI以便路由该URL 。即使您将/sale重写为/discount-page/(实际URL),WordPress仍会看到/sale(请求的URL)-WP内部不存在;因此是404。

尽管不是您的意图,您可以将其更改为外部重定向以解决此问题(这也避免了潜在的重复内容问题)。例如:

RewriteRule ^sale$ /discount-page/ [R,L]

(我删除了?中的^sale?$,因为它看起来确实是错误的。还是您真的要匹配/sale/sal?)

或者,您可以尝试重写基础的“普通”永久链接。即。明确传递%post_id%。这与重写到%postname%不同,因为WP无需检查REQUEST_URI即可路由URL。例如:

RewriteRule ^sale$ /index.php?p=123 [L]

123是您的%post_id%中的discount-page。通过直接重写为index.php,您可以有效地绕过WP的前控制器。

请注意,此操作必须在.htaccess(又称前端控制器)中的标准WordPress指令之前


但是,我仍然觉得应该有一种更类似于WordPress的方式,这就是为什么我最初建议在WordPress Stack上问这个问题的原因。但是,如果这样做,请不要提及“ .htaccess”。您真正创建的是URL别名或类似名称。例如:Have two different URLs show the homepage