htaccess RewriteRule不再工作了

时间:2014-01-03 12:47:37

标签: php apache .htaccess mod-rewrite

今天早些时候,我得到了以下代码:

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

不起作用。

任何?

再次提前致谢:)

2 个答案:

答案 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

这将只允许单词字符和路径名中的减号。