信息
我目前正在使我的网站更加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是整数还是不是)
谢谢!问题将尽快得到解答。
答案 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。