在ExpressionEngine中使用类别时,可以设置Category URL Indicator 触发词以按其{category_url_title}
加载类别。
我想从网址中删除“触发词”类别。
这是我到目前为止所拥有的,触发词设置为“category”:
RewriteRule /products/(.+)$ /products/category/$1 [QSA,L]
我不是编写正则表达式的专家,但我做了一点。我99%确定我的RegEx没问题,但是当我在.htaccess
文件中尝试将其用作RewriteRule时,我收到500错误。
我确定这是愚蠢的,但由于某种原因,我没有看到我的错误。我做错了什么?
更新:在RewriteRule的开头添加^
修复了500错误。
RewriteRule ^/products/(.+)$ /products/category/$1 [QSA,L]
答案 0 :(得分:3)
这不安全。取:
/products/a
正则表达式组匹配a
。
它将被重写为:
/products/category/a
正则表达式再次匹配 (这次,该组匹配category/a
)。猜猜会发生什么。
如果输入后面没有/products/
,则需要category/
,这意味着您需要一个负向前瞻。此外,QSA
标志没有用,您没有要重写的查询字符串(QSA代表查询字符串追加):
RewriteRule ^/products/(?!category/)(.+) /products/category/$1 [L]
使用它的另一种方式(我个人更喜欢)是在规则之前使用RewriteCond
:
RewriteCond %{REQUEST_URI} ^/products/(?!category/)
RewriteRule ^/products/(.*) /products/category/$1 [L]
答案 1 :(得分:0)
这个Apache RewriteRule应该为你做的工作*:
RewriteCond %{REQUEST_URI} ^/products/(?!category/)
RewriteRule ^/products/(.*) /products/category/$1 [L]
有了这个,你需要手动硬编码你的类别链接:
{categories backspace="2"}
<a href="{site_name}/products/{category_url_title}">{category_name}</a>,
{/categories}
哪个会输出您想要的新类别网址:
http://example.com/products/toys
否则,如果在构建类别链接时使用推荐的path variable:
{categories backspace="2"}
<a href="{path=products/index}">{category_name}</a>,
{/categories}
将在URI中创建与Category URL Indicator的链接:
http://example.com/products/C1
http://example.com/products/category/toys
哪个 - 虽然完全有效 - 会在您的网站上创建canonicalization issues,因为不同的网址会显示为搜索引擎的重复内容。
*感谢fge精彩的mod_write规则。