2012-01-03 7 views
0

ExpressionEngineでカテゴリを使用する場合、でカテゴリを読み込むように トリガーワードを設定できます。ExpressionEngine RewriteRule RegEx Throws 500 Error

URLからカテゴリー「トリガーワード」を削除したいと思います。

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

私は正規表現を書くことで、専門家ではないんだけど、私は少しの操作を行います。ここでは

は、私がこれまでに、「カテゴリ」に設定されたトリガ・ワードとしたものです。私はRegExが大丈夫だと99%確信していますが、.htaccessファイルでRewriteRuleとして使用しようとすると、500エラーが発生します。

私はそれが何か愚かだと確信していますが、何らかの理由で私は間違いを見ていません。私は間違って何をしていますか?


更新:のRewriteRuleの先頭に^を追加するには、500エラーを修正。

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

ここで先読みの使用に「^」 – Roi

答えて

3

これは安全ではありません。取る:

/products/a 

正規表現グループはaと一致します。

それに書き換えされる:正規表現が再び一致

/products/category/a 

(この時、グループはcategory/aと一致します)。何が起こるかを推測する。

それはcategory/が続いていない場合は、あなたが否定先読みをしたい意味し、入力の先頭から/products/をしたいです。また、QSAフラグは役に立たない、あなたが書き換えるようにクエリ文字列を持っていない(QSAは、クエリ文字列追加の略):

RewriteRule ^/products/(?!category/)(.+) /products/category/$1 [L] 

もうそれを使用する方法(と私は個人的に好みで)にありますRewriteCond前ルールに使用します。

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

+1を追加してこの問題を修正しました。 – anubhava

+0

私はそれが好きです!私はそれが2回書き直すことを気づかなかった - 意味tho!ありがとうございました! – Roi

0

これはApacheのRewriteRuleは*あなたのための仕事をする必要があります。場所にこれにより

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

を、あなたはハードコードお使いのカテゴリ李する必要があります手動NKS:

http://example.com/products/toys 

そうでない場合は、お使いのカテゴリリンク構築する際に推奨path variableを使用している場合:

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

作成したリンクを出力新しいカテゴリーのURLは、あなたが望むだろう

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

URIにCategory URL Indicatorを含む:

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

どの— 異なるURLが検索エンジンに重複コンテンツとして表示されますので、完全に有効な —がサイトのcanonicalization issuesを作成しながら。


*華麗mod_writeルールのfgeの功績によるものです。

関連する問題