URL问题中的&符号

时间:2011-11-26 08:16:22

标签: .htaccess url ampersand

我有一个创建URL的php页面:

vendors/London City/cat-DJ & Entertainment/keywords

我的.htaccess重定向如下所示

RewriteRule vendors/(.+)/cat-(.+)/(.+)$ vendors.php?location=$1&category=$2&freetext=$3 [L]
RewriteRule vendors/(.+)/cat-(.+)/(.+)/$ vendors.php?location=$1&category=$2&freetext=$3 [L]
在vendor.php文件中

问题1是,我只将“DJ;娱乐”作为类别。 &符号丢失。

问题2 是:我的完整.htaccess文件如下所示... 6条规则已定义。

RewriteRule vendors/(.+)/(.+)/$ vendors.php?location=$1&freetext=$2 [L] 
RewriteRule vendors/(.+)/(.+)$  vendors.php?location=$1&freetext=$2 [L]
RewriteRule vendors/(.+)/cat-(.+)/$ vendors.php?location=$1&category=$2 [L]
RewriteRule vendors/(.+)/cat-(.+)$  vendors.php?location=$1&category=$2 [L]
RewriteRule vendors/(.+)/cat-(.+)/(.+)$ vendors.php?location=$1&category=$2&freetext=$3[L]
RewriteRule vendors/(.+)/cat-(.+)/(.+)/$ vendors.php?location=$1&category=$2&freetext=$3[L]

为什么网址供应商/伦敦城市/ cat-DJ&娱乐/关键字符合规则3或4并重定向到vendors.php?location = $ 1& category = $ 2?

.htaccess是一个一个地从上到下处理规则吗?

我通过将规则5和6放在其他规则的顶部来解决问题。我做了正确的修复吗?

2 个答案:

答案 0 :(得分:0)

来自the docs

  

定义这些规则的顺序很重要 - 这是它们在运行时应用的顺序。

答案 1 :(得分:0)

1。我不太喜欢在网址中包含空格和其他特殊字符的想法。我不知道您的网站是否可以使用,而不是这种网址

vendors/London City/cat-DJ & Entertainment/keywords

你应该有这个:

vendors/london-city/cat-dj-and-entertainment/keywords

当然,为此,您必须在数据库中执行一些额外的转换/查找,以将london-city转换回London City并将dj-and-entertainment转换回DJ & Entertainment。这可以通过存储这些"从 - 到"数据库中的对。

2。无论如何 - 规则的顺序很重要。因此,您应该从更具体的规则开始,最终得到更通用的规则。

此外 - (.+)模式过于宽泛,因为它可以匹配hello以及hello/pink/kitten。为了确保您始终只抓取一个部分(/之间的网址的一部分)而使用([^/]+)模式 - 这将解决您的问题#2"的其中一个方面。

因此,请尝试使用这些优化规则(每个规则将匹配带有和不带斜杠的URL):

RewriteRule ^vendors/([^/]+)/cat-([^/]+)/([^/]+)/?$ vendors.php?location=$1&category=$2&freetext=$3 [L]
RewriteRule ^vendors/([^/]+)/cat-([^/]+)/?$ vendors.php?location=$1&category=$2 [L]
RewriteRule ^vendors/([^/]+)/([^/]+)/?$ vendors.php?location=$1&freetext=$2 [L] 
  

此外,我还没有获得'类别'的价值。用&符号作为   在网址中给出。我只得到了分号。什么可以   原因是什么?

我目前没有运行Apache框,因此无法立即检查,但尝试在B标记旁边添加NEL标记(例如{{ 1}}) - 其中一个应该有所帮助: