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



不确定这是否是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

有人能帮忙吗?

使用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?(

或者,您可以尝试重写到底层的"普通"永久链接。即显式传递CCD_ 17。这与重写为%postname%不同,因为WP不需要检查REQUEST_URI来路由URL。例如:

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

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

注意,这必须在.htaccess(也称为前端控制器(中的标准WordPress指令之前


然而,我仍然觉得应该有一种更像WordPress的方式来做这件事,这就是为什么我最初建议在WordPress堆栈上问这个问题。但是,如果你这样做了,就不要提".htaccess"。你真正创建的是一个URL别名或类似的东西。例如:有两个不同的URL显示主页

最新更新