htaccess多个目录和GET参数

时间:2018-08-30 16:55:10

标签: apache .htaccess mod-rewrite

我正在用PHP开发一个站点,并使用MAMP在我的计算机上本地运行该站点以进行测试。现在,我正在尝试清理后端区域(admin)的URL,以产生类似以下的URL:

dbContext.MyEntities
         .where(s => s.TestResult == "Pass") (store count here, somehow)
         //How to Group here - to get pass/fail count ?

这是我的localhost/admin/products/read/1 根目录:

.htaccess

我也在删除上面代码的最后一行的同时尝试了RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^.]+)$ $1.php [NC] RewriteRule ^admin/products/read/([0-9]+)/?$ admin/products/read.php?id=$1 [NC]

RewriteRule

文件夹结构:

RewriteRule ^admin/(products|users|companies)/(read|update|delete)/(.*)$ /$1?id=$2 [NC,L]

尝试使用以下网址时,Chrome和Safari抛出404找不到

htdocs
 - admin
  - products
   - read.php
   - update.php
   - delete.php
   - index.php
  - users
   - ...
  - companies
   - ...
index.php

感谢所有帮助!

更新18/08/18

在MrWhite的帮助下,我从他的回答中写下了这些内容,以扩大我的localhost/admin/products/read/1 localhost/admin/products/read/1/ etc.. 文件中的范围:

.htaccess

哪个让我思考,我是否可以仅通过检查查询RewriteRule ^admin/(.*)/(.*)/([0-9]+)/?$ admin/$1/$2.php?id=$3 [L] 然后重写来保持配置文件的整洁?

1 个答案:

答案 0 :(得分:1)

您的指令顺序错误。您还缺少一些L标志。并且您需要确保未启用MultiViews

请尝试以下操作:

Options -MultiViews
RewriteEngine On

RewriteRule ^admin/products/read/([0-9]+)/?$ admin/products/read.php?id=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.php [L]

相反,通过使用伪指令,它将在{-{1}}扩展名后附加到URL路径,并且永远不会与第二条伪指令匹配。

此外,指令匹配后,您不希望继续处理,因此需要.phpL)标志。