1

我的 .htaccess 中有以下逻辑:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule notes/(.*?) notes/?u=/$1
</IfModule>

但是,由于某种原因,这总是会从输出中删除查询字符串。因此,例如,这是我 git 的结果:

http://localhost:8888/notes/tifffilmtips   >   http://localhost/notes/

但是,如果我将 RewriteRule 更改为RewriteRule notes/(.*?) notes/u=/$1,不包括?之前的u=,结果是:

http://localhost:8888/notes/tifffilmtips   >   http://localhost/notes/u=/tifffilmtips

所以由于某种原因,输出总是丢弃生成的查询字符串。为什么会这样?我尝试了不同的标志,但找不到可以按预期工作的标志,也找不到其他有类似问题的人的参考。


编辑:

这是第一部分工作的完整 htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^$
RewriteBase /magazine/wordpress/
RewriteRule ^notes/(.*)$ notes/?u=/$1 [QSA,NC,L]
</IfModule>

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

# END WordPress
4

2 回答 2

1

将您的 RewriteRule 更改为:

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

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^notes/(.*)$ notes/?u=/$1 [NC,L]    

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /magazine/wordpress/index.php [L]

</IfModule>
于 2013-09-19T09:57:40.750 回答
1

如果/notes/被路由为 wordpress 永久链接,那么这会有点痛苦,因为当您打开永久链接时,wordpress 通常会删除查询字符串。看看这篇文章,它讲述了 wordpress 为什么这样做,它是如何做到的,以及如何解决它。wordpress 中的永久链接在 wordpress 内部添加了额外的重写层,并且查询字符串参数在发生这种情况时会被吹走。所以修复涉及添加一些 php 代码,特别是在您的主题functions.php脚本中。就像是:

function add_query_vars($aVars) {
  $aVars[] = "u"; 
  return $aVars;
}

// hook add_query_vars function into query_vars
add_filter('query_vars', 'add_query_vars');

然后:

function add_rewrite_rules($aRules) {
  $aNewRules = array('notes/([^/]+)/?$' => 'index.php?pagename=notes&u=$matches[1]');
  $aRules = $aNewRules + $aRules;
  return $aRules;
}

// hook add_rewrite_rules function into rewrite_rules_array
add_filter('rewrite_rules_array', 'add_rewrite_rules');
于 2013-09-19T11:30:11.213 回答