需要 .htaccess 帮助才能进行漂亮的推荐 link

.htaccess help needed to make nice looking referral link

我需要有关漂亮推荐的帮助 link。例如这里是推荐 link

http://www.my-domain.com/register.php?ref=john.doe

这是一个完美的 url 但看起来不像下面的那样好

http://www.my-domain.com/john.doe

如何使用 .htaccess 文件实现此目的?请注意,我的服务器中有 index.php、member.php 和其他许多 php 文件。此外,如果有人写 my-domain.com 它需要打 index.php file.

非常感谢任何帮助。

根据您的示例,您可以使用以下 .htaccess:

DirectoryIndex index.php
RewriteEngine On
RewriteRule ^([a-zA-Z]+\.php)$  [NC,L]
RewriteRule ^([a-zA-Z]+\.[a-zA-Z]+)$ register.php?ref=

其工作原理如下:

  • 第 1 行:如果有人访问 http://www.my-domain.com/,则将索引文件设置为 index.php。这应该已经可以工作了,但以防万一。
  • 第 2 行:启用 RewriteEngine.
  • 第 3 行:如果有人想要访问以 .php 结尾的任何内容(从技术上讲:任何至少有一个字符的内容),它只是被转发(即 foo.php 将被映射到 foo.php). [NC,L] 启用不区分大小写的匹配(对于扩展名 - 你永远不知道)并阻止执行任何进一步的规则。否则第二个也会每次都匹配。
  • 第 4 行:如果有人想访问任何匹配 "at least one character, a dot, at least one more character" 的内容,那么这将被映射到 register.php?ref=<input>

注意:这将有效地阻止所有以 .php 结尾的用户名,但允许访问您的所有文件。它还将防止用户名包含少于或多于一个点,如果您的文件或用户名包含任何其他字符(例如 foo_bar.phpi_love_php),它在当前形式下将不起作用。但是,如果需要,可以轻松克服这两个限制,只需提供有关预期行为的更多详细信息即可。

可以 添加一个 RewriteCond 来检查是否确实存在具有所请求名称的 .php 文件,否则将其视为用户名,但是我真的不认为你应该那样做(考虑添加新文件)。

这将为您提供所需的信息。此规则将处理 nice link 并将旧的 link 重定向到 nice link。

DirectoryIndex index.php
RewriteEngine On
RewriteCond %{THE_REQUEST} ^GET\ /+register\.php\?ref=(.+)
RewriteRule ^ %1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /register.php?ref= [L]