.htaccess 为特定页面提供前缀路径
.htaccess to serve specific pages with prefix path in front of it
我需要提供这些页面:
/类别/*
作为
/shop/category/*
我需要 url 在 /category/
前面有 /shop
并且它还需要处理类别中的所有嵌套路径结构。
我如何通过首选 .htaccess 执行此操作?
还有一个 /shop/
页面,我不想被任何 .htaccess 编辑打扰。
所以,我只需要用 url 代替 /shop/category/
来提供 /category/
页面,这可以通过 .htaccess 实现吗?
所以我是 .htaccess 重写的初学者,但已经尝试过这个:
RewriteCond %{HTTP_HOST} ^category/$
RewriteRule ^shop/category/(.*)$ category/ [L]
它什么也没做...
也试过这个:
RewriteCond %{HTTP_HOST} ^category/(.*)
RewriteRule ^$ /shop/category/? [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/ [R,L]
还在 init
wordpress 操作中尝试了以下操作:
add_rewrite_rule('^/shop/category(?:/.*)?', '/category/$matches[1]', 'top');
运气不好。
好的,看来我可能会在这里到达某个地方...
以下 add_rewrite_rule
仅匹配第一个类别,但不匹配子类别:
add_rewrite_rule('shop/category/?([^/]*)', 'index.php?product_category=$matches[1]', 'top');
我使用的自定义分类法是 product_category
,而不是 wordpress 默认 category
,因为我不希望我的产品类别与 post 类别混合。所以,我现在只需要弄清楚,如何匹配所有路径(包括子类别),例如:
/category/gelest-inc/silanes-silicones/
silanes-silicones 是 gelest-inc 的子项,如何在上面的重写规则中也捕获它?
你的规则说如果 HTTP_HOST 是 catagory/ 那么重写主页(^$ 匹配一个空的 uri 例如 : /)到 /shop/catagory。当您在模式中使用 URI 与 HTTP_HOST header 匹配时,您的 RewriteCond 永远不会满足。
如果你想重定向 /catagory/ 到 /shop/catagory ,你可以使用
RewriteEngine on
RewriteRule ^catagory/([^/]*)/?$ /shop/catagory/ [L,R]
您有 WordPress 规则,在规则之后是 "shop" 规则。
当商店 URI 不是真实文件或目录时,对其的请求将由 WordPress 规则处理并重写为 index.php
。 Apache 然后用 index.php
进行第二次迭代,但它不符合商店规则并且从不重定向或重写。
要做到这一点,商店规则必须先行
RewriteRule ^shop/category/(.*)$ category/ [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
现在这取决于你想要实现什么,从
重定向
RewriteRule ^shop/category/(.*)$ category/ [R,L]
或shop/category
RewriteRule ^category/(.*)$ shop/category/ [R,L]
如果我正确理解您的问题,那么 .htaccess 应该可以满足您的要求:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^category(?:/.*)?$ /shop/[=10=] [R=301,NC,NE,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
我需要提供这些页面:
/类别/*
作为
/shop/category/*
我需要 url 在 /category/
前面有 /shop
并且它还需要处理类别中的所有嵌套路径结构。
我如何通过首选 .htaccess 执行此操作?
还有一个 /shop/
页面,我不想被任何 .htaccess 编辑打扰。
所以,我只需要用 url 代替 /shop/category/
来提供 /category/
页面,这可以通过 .htaccess 实现吗?
所以我是 .htaccess 重写的初学者,但已经尝试过这个:
RewriteCond %{HTTP_HOST} ^category/$
RewriteRule ^shop/category/(.*)$ category/ [L]
它什么也没做...
也试过这个:
RewriteCond %{HTTP_HOST} ^category/(.*)
RewriteRule ^$ /shop/category/? [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/ [R,L]
还在 init
wordpress 操作中尝试了以下操作:
add_rewrite_rule('^/shop/category(?:/.*)?', '/category/$matches[1]', 'top');
运气不好。
好的,看来我可能会在这里到达某个地方...
以下 add_rewrite_rule
仅匹配第一个类别,但不匹配子类别:
add_rewrite_rule('shop/category/?([^/]*)', 'index.php?product_category=$matches[1]', 'top');
我使用的自定义分类法是 product_category
,而不是 wordpress 默认 category
,因为我不希望我的产品类别与 post 类别混合。所以,我现在只需要弄清楚,如何匹配所有路径(包括子类别),例如:
/category/gelest-inc/silanes-silicones/
silanes-silicones 是 gelest-inc 的子项,如何在上面的重写规则中也捕获它?
你的规则说如果 HTTP_HOST 是 catagory/ 那么重写主页(^$ 匹配一个空的 uri 例如 : /)到 /shop/catagory。当您在模式中使用 URI 与 HTTP_HOST header 匹配时,您的 RewriteCond 永远不会满足。
如果你想重定向 /catagory/ 到 /shop/catagory ,你可以使用
RewriteEngine on
RewriteRule ^catagory/([^/]*)/?$ /shop/catagory/ [L,R]
您有 WordPress 规则,在规则之后是 "shop" 规则。
当商店 URI 不是真实文件或目录时,对其的请求将由 WordPress 规则处理并重写为 index.php
。 Apache 然后用 index.php
进行第二次迭代,但它不符合商店规则并且从不重定向或重写。
要做到这一点,商店规则必须先行
RewriteRule ^shop/category/(.*)$ category/ [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
现在这取决于你想要实现什么,从
重定向RewriteRule ^shop/category/(.*)$ category/ [R,L]
或shop/category
RewriteRule ^category/(.*)$ shop/category/ [R,L]
如果我正确理解您的问题,那么 .htaccess 应该可以满足您的要求:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^category(?:/.*)?$ /shop/[=10=] [R=301,NC,NE,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress