Mod_rewrite删除文件夹+扩展工作,除了一个文件夹



我的mod_rewrite有一个非常奇怪的情况。我有以下。htaccess:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
ErrorDocument 404 /404.php
RewriteRule ^approval/(.*)/(.*)/[0-9]$ /view/approval/$1/$2.php [NC,N]
RewriteRule ^approval/(.*)/(.*)$ /view/approval/$1.php?id=$2 [NC,N]
RewriteRule ^approval/(.*)$ /view/approval/$1.php [NC]
RewriteRule ^dashboard/(.*)/(.*)/[0-9]$ /view/dashboard/$1/$2.php [NC,N]
RewriteRule ^dashboard/(.*)/(.*)$ /view/dashboard/$1.php?id=$2 [NC,N]
RewriteRule ^dashboard/(.*)$ /view/dashboard/$1.php [NC]

审批工作的重写规则-他们删除"view"文件夹,和。php(因此/view/approval/file/thisfile.php变成/approval/file/thisfile)。

但是,仪表板的相同代码和结构不仅不起作用,而且倾向于添加.php。所以/view/dashboard/file/managethis.php变成了/view/dashboard/file/managethis/.php/(斜杠转义)

所有url都在一个名为"view"的单独文件夹中,并且都删除了。php。我如何在一个rewriterrule中做到这一点,而不是重写每个文件夹?

在正则表达式中使用[^/]+代替.*,也不需要在右侧转义点:

ErrorDocument 404 /404.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule  - [L]
RewriteRule ^dashboard/([^/]+)/([^/]+)/[0-9]/?$ /view/dashboard/$1/$2.php [NC,L,QSA]
RewriteRule ^dashboard/([^/]+)/([^/]+)/?$ /view/dashboard/$1.php?id=$2 [NC,L,QSA]
RewriteRule ^dashboard/([^/]+)/?$ /view/dashboard/$1.php [NC,L]

相关内容

最新更新