mod_rewrite URL(第二部分中的条件)

时间:2013-06-26 11:22:36

标签: regex apache url mod-rewrite

我有以下重写规则

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为None。简单地说,我想把条件放在这一部分。

修改

  

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

  

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

请建议?

谢谢!

1 个答案:

答案 0 :(得分: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]