需要 .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.php
或 i_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]
我需要有关漂亮推荐的帮助 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.php
或 i_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]