mod_rewrite动态平面链接,通配符目录

时间:2014-04-12 22:31:34

标签: php apache .htaccess mod-rewrite

我正在尝试使用动态php页面构建在线商店。目前,.htaccess使用以下内容:

RewriteEngine on
RewriteBase /


RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L]
RewriteRule ^online_store/category/(.*)$ category?uri=$1 [QSA,L]
RewriteRule ^(.*)$ index.php?action=$1 [QSA,L]

我的index.php只是用一堆包含构建的,所以浏览类别的平面链接将是:

domain.com/online_store/category/apparel

Index.php包含online_store.htm,它正确处理URI。

我接下来要完成的是为产品URI添加规则,这将告诉index.php包含product.htm来处理给定的URI:

domain.com/online_store/category/apparel/t-shirt1

我认为这会像添加一样简单:

RewriteRule ^online_store/category/(.*)/(.*)$ product?uri=$2 [QSA,L]

但它不起作用。甚至我没有受过教育的头脑也告诉我,之前的类别重写规则优先于这个,因为L包括在内 - 但是当我删除它时,它都不起作用。有人能教会我正确处理这个问题的方法吗?从逻辑上讲,我需要这样做:

domain.com/online_store/category/(URI1)/(URI2) 
rewrite domain.com/category?uri=(URI1)
rewrite domain.com/product?uri=(URI2)

最终编辑 - 我决定废弃将产品嵌套在相应类别中的想法,事实证明我使用我的php脚本获取URI的方式存在问题。这是为我工作的.htaccess:

RewriteRule ^online_store/category/([^/]+)$ /category?uri=$1 [QSA,L]
RewriteRule ^online_store/product/([^/]+)$ /product?uri=$1 [QSA,L]

1 个答案:

答案 0 :(得分:1)

你应该这样做:

RewriteRule ^online_store/category/[^/]+/(.*)$ category?uri=$1 [QSA,L]

它与greedy repetition有关。基本上,点匹配任何字符,包括斜杠(/)