Php 仅当成功重写父目录时才重写目录

Php 仅当成功重写父目录时才重写目录,php,regex,apache,.htaccess,mod-rewrite,Php,Regex,Apache,.htaccess,Mod Rewrite,假设我有这个网址: 我想改写为: 如何在不定义每个可能的子目录组合的情况下实现这一点 以下是我尝试过的: RewriteRule ^(.*)/(.*)/(.*)$ index.php?area=$1&page=$2&threadid=$3 [NC,L] 还有其他一些尝试,都是徒劳的 这就是我最终得到的结果(并且有效): 我怎样才能实现我想做的事 URL参数可以保留为空。它们将被我的脚本忽略。尝试以下规则: RewriteEngine On RewriteCond

假设我有这个网址:

我想改写为:

如何在不定义每个可能的子目录组合的情况下实现这一点

以下是我尝试过的:

RewriteRule ^(.*)/(.*)/(.*)$    index.php?area=$1&page=$2&threadid=$3   [NC,L]
还有其他一些尝试,都是徒劳的

这就是我最终得到的结果(并且有效):

我怎样才能实现我想做的事

URL参数可以保留为空。它们将被我的脚本忽略。

尝试以下规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(?:/([^/]*)(?:/([^/]*))?)?/?$ /index.php?area=$1&page=$2&threadid=$3 [QSA,L]
虽然不清楚您的意思:
是否有一些正则表达式仅在与第一个子目录匹配时才尝试与下一个子目录匹配?
尝试以下规则:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(?:/([^/]*)(?:/([^/]*))?)?/?$ /index.php?area=$1&page=$2&threadid=$3 [QSA,L]

虽然还不清楚您的意思:
是否有一些正则表达式只有在与第一个子目录匹配时才会尝试与下一个子目录匹配?

谢谢,它几乎可以工作了!它404位于第一级目录,但可用于每个子目录(在我的示例中,我可以查看特定的线程)。此外,它只在包含反斜杠时才起作用-这是可选的吗?我试过使用/?没有运气。请提供每个案例的例子,它不起作用。我可以建议一条出路。mysite.com/forum/不存在。mysite.com/forum/thread/does。mysite.com/forum/thread不存在。mysite.com/forum/thread/does(注意反斜杠)。那么您也想重定向
mysite.com/forum/thread/
?应该重定向什么URI?那会是:
/index.php?area=forum&page=thread&threadid=
?好吧,我的示例很差/太简单了,下面是它的实际使用方式:谢谢,它几乎可以工作了!它404位于第一级目录,但可用于每个子目录(在我的示例中,我可以查看特定的线程)。此外,它只在包含反斜杠时才起作用-这是可选的吗?我试过使用/?没有运气。请提供每个案例的例子,它不起作用。我可以建议一条出路。mysite.com/forum/不存在。mysite.com/forum/thread/does。mysite.com/forum/thread不存在。mysite.com/forum/thread/does(注意反斜杠)。那么您也想重定向
mysite.com/forum/thread/
?应该重定向什么URI?那是:
/index.php?area=forum&page=thread&threadid=
?好吧,我的示例很差/太简单了,下面是它的实际使用方式: