.htaccess内部重定向不使用字符串参数

sha*_*ver 14 php wordpress .htaccess mod-rewrite redirect

所以我已经在这几个小时,但无法解决它.stackoverflow上没有任何内容可以解决我的问题.问题是我的.htaccess中有一个重定向规则,如下所示

RewriteRule ^store-category/(.+)/?$ /wordpress/store-category/?cid=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)

当cid是数字时,此重定向有效,但是当使用像"my-key"这样的字符串时,它不起作用.使用密钥我必须将规则更改为此.

RewriteRule ^store-category/(.+)/?$ /wordpress/store-category/?cid=$1 [R,L]
Run Code Online (Sandbox Code Playgroud)

但是我不想使用它,因为这会明显地重定向我的用户并且url会发生变化,这是我不想要的.任何人都可以解释为什么这个东西适用于数字但不适用于字符串参数.任何帮助,将不胜感激.

编辑:完成.htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteRule ^store-category/(.+)/?$ /wordpress/store-category/?cid=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>

# END WordPress
Run Code Online (Sandbox Code Playgroud)

Nic*_*nia 0

正则表达式是贪婪的(从左到右)。您正在拉入额外的斜线,可能是其他东西。我发现最简单的方法是不使用 URL 类(很少使用“.”来匹配所有内容)。

RewriteRule ^store-category/([^\/]+)/?$ store-category/?cid=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)

您也可以对此进行简化,具体取决于您希望如何处理商店类别 ID 之后可能格式错误的 url。

RewriteRule ^store-category/([^\/]+) store-category/?cid=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)

编辑:你是对的。我没有测试整个htaccess。您在 rewritebase 中指定了 wordpress 路径两次,并在规则中再次指定。我已经更新了上面的规则,并在测试器中提供了更新解决方案的链接:

http://htaccess.mwl.be?share=116de701-cf8a-577c-bab5-5c357d844452