Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress .htaccess可为前面带有前缀路径的特定页面提供服务_Wordpress_Apache_.htaccess_Permalinks - Fatal编程技术网

Wordpress .htaccess可为前面带有前缀路径的特定页面提供服务

Wordpress .htaccess可为前面带有前缀路径的特定页面提供服务,wordpress,apache,.htaccess,permalinks,Wordpress,Apache,.htaccess,Permalinks,我需要提供以下页面: /类别/* 作为 /店铺/类别/* 我需要url在/category/前面有/shop,它还需要处理category中的所有嵌套路径结构 如何通过.htaccess进行此操作 还有一个/shop/页面,我不想被任何.htaccess编辑所干扰 因此,我只需要为/category/页面提供url为/shop/category/的服务,这可以通过.htaccess实现吗 因此,我是.htaccess重写的初学者,但我尝试过: RewriteCond %{HTTP_HOST} ^

我需要提供以下页面:

/类别/*

作为

/店铺/类别/*

我需要url在
/category/
前面有
/shop
,它还需要处理category中的所有嵌套路径结构

如何通过.htaccess进行此操作

还有一个
/shop/
页面,我不想被任何.htaccess编辑所干扰

因此,我只需要为
/category/
页面提供url为
/shop/category/
的服务,这可以通过.htaccess实现吗

因此,我是.htaccess重写的初学者,但我尝试过:

RewriteCond %{HTTP_HOST} ^category/$
RewriteRule ^shop/category/(.*)$ category/$1 [L]
RewriteCond %{HTTP_HOST} ^category/(.*)
RewriteRule ^$ /shop/category/$1? [R,L]
它不做任何事情,但是

我也试过:

RewriteCond %{HTTP_HOST} ^category/$
RewriteRule ^shop/category/(.*)$ category/$1 [L]
RewriteCond %{HTTP_HOST} ^category/(.*)
RewriteRule ^$ /shop/category/$1? [R,L]
同样,对任何事情都没有影响

我正在使用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

RewriteRule ^shop/category/(.*)$ category/$1 [R,L]
运气不好

好吧,看来我可能会有进展

以下
add\u rewrite\u规则
仅匹配第一个类别,但不匹配子类别:

add_rewrite_rule('shop/category/?([^/]*)', 'index.php?product_category=$matches[1]', 'top');
我使用的自定义分类法是
product\u category
,而不是wordpress default
category
,因为我不希望我的产品类别与帖子类别混合。所以,我现在只需要弄清楚如何匹配所有路径(包括子类别),例如:

/category/gelest inc/硅烷硅酮/


硅烷硅酮是gelest inc.的子公司,如何在上面的重写规则中也捕捉到这一点?

您的规则说,如果HTTP_主机是分类/,则将主页(^$匹配空uri,例如:/)重写为/shop/catagory。您的重写条件永远不会满足,因为您正在使用模式中的URI与HTTP_主机头进行匹配

如果要重定向/分类/到/商店/分类,可以使用

RewriteEngine on

RewriteRule ^catagory/([^/]*)/?$ /shop/catagory/$1 [L,R]

你有WordPress规则,规则之后是“商店”规则

当商店URI不是真实的文件或目录时,对它的请求将已经由WordPress规则处理并重写为
index.php
。Apache然后使用
index.php
进行第二次迭代,但它与商店规则不匹配,并且从不重定向或重写


要做到这一点,首先必须遵守商店规则

RewriteRule ^shop/category/(.*)$ category/$1 [R,L]

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

现在,这取决于您想要实现什么,从

RewriteRule ^shop/category/(.*)$ category/$1 [R,L]
或前往
商店/品类

RewriteRule ^category/(.*)$ shop/category/$1 [R,L]

如果我正确理解了您的问题,以下.htaccess应满足您的要求:

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

RewriteRule ^category(?:/.*)?$ /shop/$0 [R=301,NC,NE,L]

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
#开始WordPress
重新启动发动机
重写基/
重写规则^category(?:/.*)$/shop/$0[R=301,北卡罗来纳州,东北州,北卡罗来纳州]
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress

谢谢,我在这里尝试过你的方法,但它根本不起作用,它没有任何效果:
重写规则^shop/category/([^/]*)/?$/category/$1[L]
例如,当我输入时:
http://localhost/category/gelest-inc/
它应该将浏览器中的url更改为:
http://localhost/shop/category/gelest-inc/
它没有:(好的,这是正确地重定向到
/shop/category/*
,但是它需要从
/category/*
加载内容,所以当它现在正在更改url结构时,它给了我一个404,而不是从
/category/*
加载内容。我们可以更改url,但仍然从
/category/
加载内容吗?)?仅仅从.htaccess是不可能的,因为这是Wirdpress.WP使用它自己的重写API。使用该API,您需要在主题的
function.php
文件中添加一个简单的规则。我查看了一下这个,以及
add_rewrite_规则
,但我仍然不确定如何在wordpress中执行此操作……您能提供一个示例吗ps?提供了一个示例,说明我正在wordpress中尝试使用的不工作的
code>规则
中的
function custom\u rewrite\u basic(){add\u rewrite\u rule('^shop/(category/)、“$matches[1]”、'bottom');}/code>然后在下一行
add\u action('init',custom\u rewrite\u basic');