我正在为以下情况寻找.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
但是我还没有让他们在一起玩得很好,也省略了图片和其他资产的目录。
非常感谢您的任何建议。
答案 0 :(得分:0)
我想我会自己制定不同的规则。按照您列出的捕获顺序。因此,如果您可以先捕获2个变量,那么请尝试1 var,然后再尝试页面等。
答案 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以匹配任何单词字符串。
。+?是一个非贪婪的比赛。它会停在第一个/