2012-01-03 55 views
0

在ExpressionEngine中使用类别时,可以将Category URL Indicator触发字设置为通过其{category_url_title}加载类别。ExpressionEngine RewriteRule RegEx引发500错误

我想从URL中删除类别“触发词”。

这里是我到目前为止,与触发字设置为“类”:

RewriteRule /products/(.+)$ /products/category/$1 [QSA,L] 

我不是在写正则表达式的专家,但我做了一点。我99%确定我的RegEx是好的,但是当我试图在我的.htaccess文件中使用它作为RewriteRule时,我得到了500错误。

我确定这是愚蠢的,但由于某种原因,我没有看到我的错误。我究竟做错了什么?


更新:添加重写规则的^到开头的固定的500错误。

RewriteRule ^/products/(.+)$ /products/category/$1 [QSA,L] 
+1

我通过在此处添加“^” – Roi 2012-01-03 07:11:00

回答

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] 
+0

+1来解决此问题。 – anubhava 2012-01-03 09:09:15

+0

我喜欢它!我没有意识到它会重写两遍 - 有道理!谢谢! – Roi 2012-01-03 17:48:20

0

这阿帕奇重写规则应该为你做的工作*:

RewriteCond %{REQUEST_URI} ^/products/(?!category/) 
RewriteRule ^/products/(.*) /products/category/$1 [L] 

有了这个地方,你需要硬编码您的类别里手动NKS:

{categories backspace="2"} 
    <a href="{site_name}/products/{category_url_title}">{category_name}</a>, 
{/categories} 

将输出的新类别的URL,你的愿望,其中:

http://example.com/products/toys 

否则,如果使用推荐path variable构建分类链接时:

{categories backspace="2"} 
    <a href="{path=products/index}">{category_name}</a>, 
{/categories} 

将创建链接与网址中的Category URL Indicator

http://example.com/products/C1 
http://example.com/products/category/toys 

其中— 而完全有效 —将创建您的网站canonicalization issues因为不同的网址,会出现重复的内容对搜索引擎。


*感谢fge的辉煌mod_write规则。