【问题标题】:.htaccess RewriteRule for WordPress: map example.com/yyyy/iframe/ to example.com/yyyy?iframe=1WordPress 的 .htaccess 重写规则:将 example.com/yyyy/iframe/ 映射到 example.com/yyyy?iframe=1
【发布时间】:2014-11-11 11:52:03
【问题描述】:

在 WordPress 网站中,所有以 /iframe/ 结尾的 URL 都应重写为 ?iframe=1,例如:

mysite.com/page1/iframe/ 应改写为 mysite.com/page1?iframe=1

为了好玩,我尝试了以下方法:

RewriteRule ^(.*)/iframe/$ http://microsoft.com [L]

这符合我的预期。 RegEx 应该是正确的。 接下来,我尝试了这个:

RewriteRule ^(.*)/iframe/$ /$1?iframe=1

在 WordPress 自己的规则上下文中,完整的文件如下所示:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# Here goes my line:
RewriteRule ^(.*)/iframe/$ /$1?iframe=1

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

但是,尽管我做了很多尝试和变化,但我唯一不断得到的就是 404。 我哪里错了?

【问题讨论】:

  • @Prix:不,/iframe/ 在这个 WordPress 安装中不存在。它应该是可以附加到任何现有 WordPress 资源的后缀。 domain.com/page1?iframe=1 在没有 RewriteRule 的情况下也可以工作。但是,服务器必须将 /iframe/ 重写为 ?iframe=1。

标签: wordpress .htaccess url mod-rewrite url-rewriting


【解决方案1】:

当您重定向到?iframe=1 时,您没有添加[R] 标志,这意味着地址栏中的URL 不会改变。这反过来意味着 Wordpress 会将“/iframe/”视为 URL 的一部分,并尝试使用该 URL 查找页面或帖子。它没有找到,所以它给你一个 404。

所以像这样修改你的规则:

RewriteRule ^(.*)/iframe/$ /$1?iframe=1 [R,L]

L 标志确保规则的处理在此规则之后结束,然后重新开始。这是使R 启动并在 URL 到达 Wordpress 部分之前实际重写 URL 所必需的。

这确实意味着 ?iframe=1 将在您的网址中保持可见。

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 2017-07-04
    • 1970-01-01
    • 2011-12-13
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多