Apache 修改重写问题

Apache 修改重写问题,apache,mod-rewrite,Apache,Mod Rewrite,我有个问题,我无法解决 我正在使用Apache和PHP 我需要得到: 从 我该如何改变这一点?我做了更简单的修改,但这稍微复杂一些。谁能帮我一把,或者给我指个正确的方向 RewriteRule ^/cat_ap~nid~(.*)\.htm$ /cat_ap?nid=$1 [R] 末尾的[R]是可选的。如果省略它,Apache将不会重定向用户(它仍将提供正确的页面) 如果nid部分也是一个变量,您可以尝试以下操作: RewriteRule ^/cat_ap~([^~]+)~(.*)\.htm

我有个问题,我无法解决

我正在使用Apache和PHP

我需要得到:

我该如何改变这一点?我做了更简单的修改,但这稍微复杂一些。谁能帮我一把,或者给我指个正确的方向

RewriteRule ^/cat_ap~nid~(.*)\.htm$ /cat_ap?nid=$1 [R]
末尾的
[R]
是可选的。如果省略它,Apache将不会重定向用户(它仍将提供正确的页面)

如果
nid
部分也是一个变量,您可以尝试以下操作:

RewriteRule ^/cat_ap~([^~]+)~(.*)\.htm$ /cat_ap?$1=$2 [R]
编辑:正如Ben Blank在评论中所说,您可能希望限制有效URL的设置。例如,您可能希望确保nid存在,并且它是数字的:

RewriteRule ^/cat_ap~nid~([0-9]+)\.htm$ /cat_ap?nid=$1
或者,如果nid部分是一个变量,则它仅由字母字符组成:

RewriteRule ^/cat_ap~([A-Za-z]+)~([0-9]+)\.htm$ /cat_ap?$1=$2
末尾的
[R]
是可选的。如果省略它,Apache将不会重定向用户(它仍将提供正确的页面)

如果
nid
部分也是一个变量,您可以尝试以下操作:

RewriteRule ^/cat_ap~([^~]+)~(.*)\.htm$ /cat_ap?$1=$2 [R]
编辑:正如Ben Blank在评论中所说,您可能希望限制有效URL的设置。例如,您可能希望确保nid存在,并且它是数字的:

RewriteRule ^/cat_ap~nid~([0-9]+)\.htm$ /cat_ap?nid=$1
或者,如果nid部分是一个变量,则它仅由字母字符组成:

RewriteRule ^/cat_ap~([A-Za-z]+)~([0-9]+)\.htm$ /cat_ap?$1=$2

假设这里的变量部分是“nid”和5964,您可以执行以下操作:

RewriteRule ^/cat_ap~(.+)~(.+).htm$ ^/cat_ap?$1=$2

第一个“(.+)”匹配“nid”,第二个匹配“5964”。

假设这里的变量部分是“nid”和5964,您可以执行以下操作:

RewriteRule ^/cat_ap~(.+)~(.+).htm$ ^/cat_ap?$1=$2

第一个“(.+)”匹配“nid”,第二个匹配“5964”。

如果您希望所有内容都是任意的:

RewriteRule ^/(\w+)~(\w+)~(\w+)\.htm$ $1?$2=$3 [L]

式中,
\w
等于
[A-Za-z0-9\]
。如果要在.htaccess文件中使用此规则,请从模式中删除前导的
/

如果希望所有内容都是任意的:

RewriteRule ^/(\w+)~(\w+)~(\w+)\.htm$ $1?$2=$3 [L]

式中,
\w
等于
[A-Za-z0-9\]
。如果要在.htaccess文件中使用此规则,请从模式中删除前导的
/

我不确定这是否有效,它是否也匹配/cat\u ap~nid~foo~5964.htm?我同意。那里的点可能应该是否定的字符类(例如,..[^~])。你们都完全正确,否定的字符类会更好。我不确定这是否有效,它是否也匹配/cat_ap~nid~foo~5964.htm?我同意。那里的点可能应该是否定的字符类(例如,.[^~])。你们都完全正确,否定的字符类会更好。您可能希望限制匹配的字符(请参阅kristina回答中的注释)。例如,如果您的ID始终是数字,请尝试使用([0-9]+)而不是(.*)。是的,我对kristina的答案发表了评论。=)我曾想过编辑我的答案,但问题并没有提出这样的要求。无论哪种方式,我都会编辑我的答案以供参考。您可能希望限制匹配的字符(请参阅对克里斯蒂娜答案的评论)。例如,如果您的ID始终是数字,请尝试使用([0-9]+)而不是(.*)。是的,我对kristina的答案发表了评论。=)我曾想过编辑我的答案,但问题并没有提出这样的要求。不管怎样,我都会编辑我的答案以供参考。