我正在尝试使URL“/ products”显示文件“products-all.php”。 “products / xxx”和“products / xxx / xx”已经有效,但我无法让第一个工作。有什么想法吗?
它曾经只是products.php,但它干扰了子类。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^/products$ products-all.php (I get file not found)
RewriteRule ^/?products/([^/]+)/?$ products-cat.php?id=$1 [L,QSA]
RewriteRule ^/?products/([^/]+)/([^/]+)/?$ product-detail.php?id=$1 [L,QSA]
答案 0 :(得分:0)
你的代码中有两个问题,首先你按照这个条件RewriteCond %{REQUEST_FILENAME} !-f
捕获所有无文件,包括目录,所以,除非请求包含文件,否则将通过这个规则RewriteRule ^([^\.]+)$ $1.php [NC,L]
。
您应该添加此行RewriteCond %{REQUEST_FILENAME} !-d
以排除目录。
第二个问题是此行RewriteRule ^/products$ products-all.php
此处您只将产品与/products$
匹配,并且它应与产品/ products/$
匹配。它应该是RewriteRule ^products/$ products-all.php
,那么您的代码应如下所示:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteRule ^products/$ products-all.php
RewriteRule ^/?products/([^/]+)/?$ products-cat.php?id=$1 [L,QSA]
RewriteRule ^/?products/([^/]+)/([^/]+)/?$ product-detail.php?id=$1 [L,QSA]