【问题标题】:htaccess with multiple variables with a "dummy" directoryhtaccess 具有多个变量和一个“虚拟”目录
【发布时间】:2013-11-06 13:05:51
【问题描述】:

信息

我目前正在使我的网站对 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 是否为整数)

谢谢!我们会尽快回答问题。

【问题讨论】:

    标签: .htaccess seo


    【解决方案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$
    

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

    【讨论】:

    • 完美运行,您使用正则表达式查看第三个变量是 id(数字)还是位置(文本)的方式是天才,并且节省了我在 PHP 中的操作!谢谢!
    猜你喜欢
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多