.htaccess规则剥离脚本扩展并将虚拟目录处理为变量

时间:2012-02-11 06:56:30

标签: apache .htaccess

我正在为以下情况寻找.htaccess规则。我在这个网站上找到了我正在寻找的片段,但我没有经验将它们正确地放在一起。 .htaccess规则将处理以下方案。

前两个示例默认情况下已经使用DirectoryIndex,但我将它们包含在内以确保它们仍可用。

/
 -> /index.php

/home
 -> /home/index.php

/home/hello
 -> /home/hello.php

/home/hello/there
 -> /home/hello.php?var1=there

/home/hello/there/again
 -> /home/hello.php?var1=there&var2=again

此外,每个方案的尾随/必须是可选的。

最后,对图像或其他文件的请求仍应正确处理。如果需要,我可以将不符合此规则的所有内容放在/ assets。

等文件夹中

到目前为止,

RewriteRule ^([^/]+)/([^/]+)/? /$1/$2.php [NC] 

适用于/ home / hello - > /home/hello.php

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/? /$1/$2.php?var1=$3 [NC]

适用于/ home / hello / there - > /home/hello.php?var1=there和

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/? /$1/$2.php?var1=$3&var2=$4 [NC]

适用于/ home / hello / there / again - > /home/hello.php?var1=there&var2=again

但是我还没有让他们在一起玩得很好,也省略了图片和其他资产的目录。

非常感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

我想我会自己制定不同的规则。按照您列出的捕获顺序。因此,如果您可以先捕获2个变量,那么请尝试1 var,然后再尝试页面等。

这可能对您有所帮助http://martinmelin.se/rewrite-rule-tester/

答案 1 :(得分:0)

Options       -MultiViews

RewriteEngine On
RewriteBase   /

DirectoryIndex index.php

RewriteCond   %{SCRIPT_FILENAME} -f       [OR]
RewriteCond   %{SCRIPT_FILENAME} -d
RewriteRule   ^                  -                                  [L]

RewriteRule   ^(.*?)/(\w+)/(.*?)/(.*?)/?  $1/$2.php?var1=$3&var2=$4 [L,QSA]
RewriteRule   ^(.*?)/(\w+)/(.*?)/?        $1/$2.php?var1=$3         [L,QSA]

RewriteCond   %{SCRIPT_FILENAME} !-d
RewriteRule   ^(.*?)/(\w+)/?              $1/$2.php                 [L]

每个目录评估是迭代的,因此您需要一个停止标准。这就是规则1的作用。

Directory索引指令处理index.php添加。

规则2-4做你的SEO以获得映射。请注意,我已更改参数2以匹配任何单词字符串。

。+?是一个非贪婪的比赛。它会停在第一个/