1

信息

我目前正在使我的网站对 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/在 url 中?或者我应该将它作为另一个变量,以便用户无法将其更改为他们喜欢的任何内容并且网站仍然可以工作?比如www.example.com/Arsenal/ANYTHINGUSERWANTSHERE/Chelsea

在这两种情况下,我都在努力让 htaccess 文件适用于多个变量,我需要多个重写规则还是只需要一个可以接受它们的规则,即使它们可能并不全部存在?

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

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

4

1 回答 1

1

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

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

以下规则未经测试,但希望应该有效:

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$

您可以在文档中找到更多信息。

于 2013-10-27T20:59:59.420 回答