将URL重写规则添加到Wordpress

log*_*nit 8 wordpress .htaccess mod-rewrite

我写了一个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
Run Code Online (Sandbox Code Playgroud)

我正在尝试重写的URL是:

http://domain.com/deal-info/?id=87&post_name=testdealtitle
Run Code Online (Sandbox Code Playgroud)

所需网址:

http://domain.com/deal-info/87/testdealtitle
Run Code Online (Sandbox Code Playgroud)

我试过添加:

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

无济于事.任何想法赞赏!

Oli*_*ons 11

当你这样做:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Run Code Online (Sandbox Code Playgroud)

这意味着:"如果它不是文件,如果它不是dir,则将所有传入的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>
Run Code Online (Sandbox Code Playgroud)

请告诉我它是否有效.


此外,如果你只想要重定向成交-信息,你应该像做(未测试):

<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>
Run Code Online (Sandbox Code Playgroud)

两个提示:


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

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

我最喜欢检查regexp的工具:

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

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


log*_*nit 3

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

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

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

再次感谢奥利维尔的详尽回答!