今天早些时候,我得到了以下代码:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* - [L]
RewriteRule ^(.*) index.php?p=$1
现在我尝试通过更改最后一行来扩展代码:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* - [L]
RewriteRule ^(.*)/(.*)/(.*)/ index.php?p=$1&sub1=$2&sub3=$3
但是现在它不再起作用了,它只是试图将我引导到我请求的目录而不是重写然后404,因为dir ofcourse不存在。
还有:
RewriteRule ^/(.*)/(.*)/(.*)/ index.php?p=$1&sub1=$2&sub3=$3
不起作用。
任何?
再次提前致谢:)
答案 0 :(得分:2)
我建议使用:
RewriteRule ^(.*)$ index.php [L]
然后在index.php上,您可以使用:
$p = explode("/", $_SERVER['REQUEST_URI']);
然后您可以访问$ p [1],$ p [2]等
答案 1 :(得分:1)
你的第一个(.*)
可能占用你的整个路径,导致它在最后寻找3个斜杠,所以你需要懒惰的匹配以避免这种情况:
RewriteRule ^(.*?)/(.*?)/(.*?)/ index.php?p=$1&sub1=$2&sub3=$3
虽然我个人不会盲目地接受所有角色,但会做类似的事情(取决于你的确切需求......):
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/ index.php?p=$1&sub1=$2&sub3=$3
这将只允许单词字符和路径名中的减号。