将 URL 重写规则添加到 Wordpress

Posted

技术标签:

【中文标题】将 URL 重写规则添加到 Wordpress【英文标题】:Add URL Rewrite Rule To Wordpress 【发布时间】:2012-01-18 14:02:23 【问题描述】:

我编写了一个 Wordpress 插件,可以将查询字符串添加到 URL。但是我似乎无法修改 htaccess 来重写它。不确定 Wordpress 是否会覆盖它?

当前的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

我要重写的 URL 是:

http://domain.com/deal-info/?id=87&post_name=testdealtitle

所需网址:

http://domain.com/deal-info/87/testdealtitle

我已经尝试添加:

RewriteRule ^([^/]*)/([^/]*)$ /deal-info/?id=$1&post_name=$2 [L]

无济于事。任何想法表示赞赏!

【问题讨论】:

哪个应用程序处理这个请求http://domain.com/deal-info/87/testdealtitle:是WordPress index.php 还是其他一些php 文件? 【参考方案1】:

当你这样做时:

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]

这意味着:“如果它不是一个文件,如果它不是一个目录,则将 all 传入的 URL 重定向到 index.php

你的重写器应该可以工作......除非你把它放在之前的重写器之后。所以,简而言之,你确定你的 .htaccess 是这样的吗:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^([^/]*)/([^/]*)$ /deal-info/?id=$1&post_name=$2 [L]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteRule . /index.php [L]
</IfModule>

请告诉我它是否有效。


此外,如果您只想重定向 only 交易信息,您应该执行以下操作(未测试):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^(/)?deal-info/([^/]*)/([^/]*)$ /deal-info/?id=$2&post_name=$3 [L]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %REQUEST_FILENAME !-f
    RewriteCond %REQUEST_FILENAME !-d
    RewriteRule . /index.php [L]
</IfModule>

两个提示:


请尝试使用RewriteLog 指令:它可以帮助您追踪此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢的检查正则表达式的工具:

http://www.quanetic.com/Regex(别忘了选择 ereg(POSIX) 而不是 preg(PCRE)!)

我可以请你在你的问题中添加重写日志吗?

【讨论】:

你这个摇滚伙伴。我不知道我今天读了多少“解释”;) 在 Wordpress 中只有一个警告,.htaccess 文件可以用 PHP 重写,您可能会丢失您的更改,请改用 rewrite api...祝您好运【参考方案2】:

经过一番困惑,我在这里找到了答案: https://wordpress.stackexchange.com/questions/5413/need-help-with-add-rewrite-rule

虽然我认为正确的方法是: http://codex.wordpress.org/Rewrite_API/add_rewrite_rule

我不确定您是否可以直接在 htaccess 中执行此操作,或者我与正在使用的另一个插件有冲突问题。

再次感谢 Olivier 的广泛回答!

【讨论】:

以上是关于将 URL 重写规则添加到 Wordpress的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess重写合并

Blazor WebAssembly - 如何在自动生成的 web.config 中添加“http 到 https”URL 重写规则

IIS7 URL 重写 - 添加“www”前缀

重写规则以将两个友好的 url 重定向到同一个文件

HTACCESS 重写:忽略语言代码并将 index.php 添加到 url 而不更改它

为 Apache 重写规则没有找到 URL?