2013-06-26 71 views
0

我有以下重写规则mod_rewrite的URL(在第二部分条件)

RewriteRule ^/product/([^/]*)/([^/]*)/([^/]*)/([^/]*)/((test_data|data_test)/)?([^/]*)$ /product/?query_one=$1&query_two=$2&query_three=$3&query_four=$4&file_path=$6/$7 

在最后file_path的价值,我结合$6/$7

如果$6没有值,那么file_path只会是$7?我不想/ ID $6是无。简单地说,我想把条件放在这部分。

编辑

https://example.com/product/one/two/three/four/test_data/file.jar

TO

https://example.com/product/?query_one=one&query_two=two&query_three=three&query_four=four&file_path=test_data/file.jar

问题是这个网址

https://example.com/product/one/two/three/four/test_file.xml

请建议?

谢谢!

+0

请提供您的源和目标URL的一些例子。 – anubhava

+0

@anubhava问题用例子更新 – Ahsan

回答

0

看起来你只需要简化一下你的匹配模式。以下工作对我来说:

RewriteRule ^/?product/([^/]*)/([^/]*)/([^/]*)/([^/]*)/(.*?)/?$ /product/?query_one=$1&query_two=$2&query_three=$3&query_four=$4&file_path=$5 [L,QSA,NC] 

或者如果你想确保DIR只有(test_data|data_test)然后使用:

RewriteRule ^/?product/([^/]*)/([^/]*)/([^/]*)/([^/]*)/((?:(?:test_data|data_test)/)?.*?)/?$ /product/?query_one=$1&query_two=$2&query_three=$3&query_four=$4&file_path=$5 [L,QSA,NC] 
+0

不,我想为这两种类型的URL使用这种模式。如果'$ 6'为空,我不希望'/'在'file_type'中。 – Ahsan

+0

除非我亲自尝试,否则我绝不会发布解决方案:P换句话说,上述“是”适用于您的两个网址。 – anubhava

+0

在这种情况下,任何东西都可以用'(。*?)',但我只想给出两个选项'(test_data | data_test)/' – Ahsan