我没有检查为什么您的问题中的规则没有按预期工作,但您可以试试这个:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([^/]+)/?([^/]*)?/?([^/]*)?/?([^/]*)?/?
RewriteRule .* edit.php?key1=%1&key2=%2&key3=%3&key4=%4 [L]
静默地图:
http://example.com/val1/
取决于
http://example.com/val1/val2/val3/val4/
带或不带斜杠
至:
http://example.com/edit.php?key1=val1&key2=val2&key3=val3&key4=val4
valN
传入 URL 中传递的值的最大数量为 4。最小值为 1。不过,可以通过修改规则来调整该范围。
当valN
传入 URL 中不存在任何内容时,添加到替换 URL 的查询中相应键值对中的值将为空。
但是,key
将始终出现在查询中,因为所有keys
都是固定字符串,而不是传入 URL 传递的。
此规则集已经过测试并且可以正常工作,并且应该在没有任何其他可能与之冲突的规则的情况下对其进行测试。我没有检查问题中的其他规则,也不能说它们是否有效或是否会影响这个规则。那不是问题的一部分。
更新
重定向到edit.php:
仅当 URL 路径中有 3 或 4 个文件夹时才需要映射到 edit.php。
修改后的规则集是:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !edit\.php [NC]
RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([^/]+)/?([^/]*)?/?$ [NC]
RewriteRule .* edit.php?key1=%1&key2=%2&key3=%3&key4=%4 [L,QSA]
静默地图:
http://example.com/val1/val2/val3/
取决于
http://example.com/val1/val2/val3/val4/
带或不带斜杠
至:
http://example.com/edit.php?key1=val1&key2=val2&key3=val3&key4=val4
传入 URL 中传递的 valN 值的最大数量为 4。最小值为 3。
重定向到 content.php:
映射到 content.php 与上一个非常相似,除了仅在文件夹数为 1 或 2 时进行。
所以规则集与较少的正则表达式组基本相同:
RewriteCond %{REQUEST_URI} !content\.php [NC]
RewriteCond %{REQUEST_URI} ^/([^/]+)/?([^/]*)?/?$ [NC]
RewriteRule .* content.php?key1=%1&key2=%2 [L,QSA]
静默地图:
http://example.com/val1/
取决于
http://example.com/val1/val2/
带或不带斜杠
至:
http://example.com/content.php?key1=val1&key2=val2
传入 URL 中传递的 valN 值的最大数量为 2。最小值为 1。
完整的规则集是这样的:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !edit\.php [NC]
RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([^/]+)/?([^/]*)?/?$ [NC]
RewriteRule .* edit.php?key1=%1&key2=%2&key3=%3&key4=%4 [L,QSA]
RewriteCond %{REQUEST_URI} !content\.php [NC]
RewriteCond %{REQUEST_URI} ^/([^/]+)/?([^/]*)?/?$ [NC]
RewriteRule .* content.php?key1=%1&key2=%2 [L,QSA]
希望我明白你想要什么。