0

我无法找到我想做的解决方案。我将有数千个附属公司在我们的网站上注册。他们将提供一个用户名,并基本上将网址 www.domain.com/affiliate/username 提供给他们的客户。

因此,我将开始使用的网址是 www.domain.com/affiliate/home.html?userid=bob(如果 bob 是他们提供的用户名)。

如果该用户 ID 存在,我需要它来检查 mysql 数据库,然后将其重定向到 www.domain.com/affiliate/bob url。

现在,我的 .htaccess 文件中有这个:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\/]+)$ affiliate/home.html?affiliate=$1 [L]

它显然不起作用,我以前从未处理过 .htaccess 。任何帮助是极大的赞赏。谢谢你。

4

2 回答 2

1

尝试这个:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^affiliate/([^/]+)/?$ /affiliate/home.html?affiliate=$1 [L]

至于如果有人输入带有查询字符串的 URL,则重定向到更好看的 URL:

RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /affiliate/home.html\?affiliate=([^\ &]+)&?([^\ ]*)
RewriteRule ^ /affiliate/%2?%3 [L,R=301]

在重写发生之前,无法使用 htaccess 文件检查用户名是否在您的数据库中。有一些方法可以在 apache 2.4 中或使用 a RewriteMap(只能在服务器或 vhost 配置中定义,而不是在 htaccess 中定义)但你最好在 home.html 中进行检查,如果返回 404未找到用户。

于 2013-06-30T21:30:07.263 回答
0

请参阅我对其他类似问题的回答

你想www.domain.com/affiliate/home.html?userid=bob被重定向到/affliate/bob. 你想/affliate/bob被重写为/affiliate/home.html?userid=bob.


将此添加到您.htaccess/www//public_html/中。

RewriteEngine on

RewriteCond %{QUERY_STRING} ^affiliate=([^&]*)$
RewriteRule ^affiliate/home\.html /affiliate/%1? [R,L]

RewriteRule ^affiliate/(.*)$ affiliate/home.html?affiliate=$1&r=0 [L]

如果用户尝试访问,则第一个规则匹配affiliate/home.html?userid=bob。RewriteCondition 匹配查询字符串的一部分(在?之后),您需要编写花哨的 url。%1匹配重写条件中的第一个“捕获组”。最后?的 将清除查询字符串。[R]表示它是重定向(请参阅链接的答案)。[L]表示如果匹配,它将停止匹配。

第二条规则是内部重写。$1匹配 RewriteRule 中的第一个“捕获组”。尾随&r=0用于阻止第一条规则匹配。它需要 aRewriteCond %{REQUEST_FILENAME} !-f才能正常运行,因为花哨的 url 与处理它的文件位于同一目录中。

于 2013-06-30T18:25:20.300 回答