带有“虚拟”目录的多个变量的htaccess

时间:2013-10-27 20:40:22

标签: .htaccess seo

信息

我目前正在使我的网站更加SEO友好,因此我的索引页面接受以下$_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值的方式是可能存在的变量也是post id所以我可以执行一个简单的检查以查看是否$ _GET是整数还是不是)

谢谢!问题将尽快得到解答。

1 个答案:

答案 0 :(得分: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(ition),以防止它与/path/to/file.php匹配。

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

您可以找到更多信息in the documentation