2013-10-27 31 views
1

信息htaccess的多变量有一个“虚拟”目录

我目前正在自己​​的网站更加搜索引擎友好的,为此我的索引页接受以下$_GET['']请求。

example.com/Variable1/staticword/Variable2

example.com/Variable1/staticword/Variable2/Variable3/

example.com/Variable1/staticword/Variable2/Variable3/Variable4

example.com/Variable1/staticword/Variable2/Variable4

对于实施例

example.com/Arsenal/vs/Chelsea

example.com/Arsenal/vs/Chelsea/Emirates/

example.com/Arsenal/vs/Chelsea/Emirates/3048

example.com/Arsenal/vs/Chelsea/3048

问题

是否有可能有一个 “虚拟” 的目录,在这种情况下/vs/的网址是什么?或者我应该将它作为另一个变量,以便用户不能将其更改为他们喜欢的任何内容,并且该网站仍然有效?如www.example.com/Arsenal/ANYTHINGUSERWANTSHERE/Chelsea

在这两种情况下,我努力让一个htaccess文件为多个变量工作,我需要多个重写规则还是只能接受它们的一个,尽管它们可能都不存在?

(关于这两种情况下的最后一个例子,我将允许用户跳过Variable3/Stadium值的方式是可能存在的变量是帖子ID,因此我可以执行简单的检查以查看如果$ _GET是整数或不)

谢谢!问题将尽快回答。

回答

1

example.com/Variable1/staticword/Variable2/Variable4是一个具有目录结构的网址。您只需将可变部分与正则表达式匹配(例如,([^/]+)),然后仅使用字符匹配静态部分。这些都应该是内部重写。你必须首先匹配最复杂的网址结构,然后从那里开始工作。您将其重写为处理请求的文件。

最简单的方法是针对每个案例分别制定规则,因为在这种情况下,您不必为了匹配所有请求而制作疯狂的正则表达式。

以下规则是未经测试,但希望应该工作:

RewriteEngine on 
RewriteBase/
RewriteRule ^([^/]+)/vs/([^/]+)/([^/]+)/([0-9]+)/?$ /path/to/file.php?var1=$1&var2=$2&place=$3&id=$4 [L] 
RewriteRule ^([^/]+)/vs/([^/]+)/([0-9]+)/?$ /path/to/file.php?var1=$1&var2=$2&id=$3 [L] 
RewriteRule ^([^/]+)/vs/([^/]+)/([^/]+)/?$ /path/to/file.php?var1=$1&var2=$2&place=$3 [L] 
RewriteRule ^([^/]+)/vs/([^/]+)/?$ /path/to/file.php?var1=$1&var2=$2 [L] 

您可能需要每个规则之前添加下面的RewriteCond(银行足球比赛),以防止它匹配/path/to/file.php

RewriteCond %{REQUEST_URI} !^/path/to/file\.php$ 

你可以找到更多的信息in the documentation

+0

完美的作品,以及你如何使用正则表达式来查看第三个变量是id(数字)还是place(文本)是天才,并且可以帮助我在PHP中节省时间!谢谢! – Harry