Php mod_重写的新功能

Php mod_重写的新功能,php,mod-rewrite,Php,Mod Rewrite,我刚开始使用mod_rewrite,可以在一些帮助下完成,这就是到目前为止我成功完成的工作 Options +FollowSymlinks RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/(.*)/pid/(.*)/(.*)$ /$1/$2.php?np=$3 [NC] RewriteRule ^

我刚开始使用mod_rewrite,可以在一些帮助下完成,这就是到目前为止我成功完成的工作

Options +FollowSymlinks
RewriteEngine On 

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)/(.*)/pid/(.*)/(.*)$ /$1/$2.php?np=$3 [NC]
RewriteRule ^news/article/(.*)$ /news/details.php?newstag=$1 [NC]
这适用于以下链接: (文件夹/文件名/pid/页面id/页面标题

但是不能用,我不能让它工作

(文件名/pid/页面id/标题)


有没有办法使文件夹选项^(.*)/可选?

要使文件夹选项可选,我将把规则分成两部分:

RewriteRule ^(.*)/(.*)/pid/(.*)/(.*)$ /$1/$2.php?np=$3 [NC]
RewriteRule ^(.*)/pid/(.*)/(.*)$ /$1.php?np=$2 [NC]
请注意,“匹配所有内容,包括“/”,因此,我猜这两个规则都会匹配URL,如:

其中1美元为“一/二/三”,2美元为“四”

要避免这种情况,请使用[^/]而不是“.”:

如果您不关心可访问文件夹的深度,那么以下规则就足够了,并且可以匹配foldername和不匹配foldername:

RewriteRule ^(.*)/pid/(.*)/(.*)$ /$1.php?np=$2 [NC]

在上一个示例中,您可能缺少“文件夹”或“文件名”。“与^(.*)/(.*))/pid/(.*)/(.*)/(.*))$不匹配,但是,它确实匹配:^(.*)/pid/(.*)/(.*))$您好,有没有办法使文件夹选项可选?
RewriteRule ^(.*)/pid/(.*)/(.*)$ /$1.php?np=$2 [NC]