htaccess重定向页面和文件夹以使用文件

时间:2018-02-04 00:11:36

标签: php apache .htaccess mod-rewrite

我正在尝试使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]

1 个答案:

答案 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]