这是我的第一个问题:
我在 PHP 中创建了一个 URL Shortner 服务。它完全没有任何问题,但是有一个问题:
想要访问他的 url 的人应该输入:MyDomain.com/go.php ?u=key 在这里我尝试通过配置 apache 来删除.php扩展名并工作。现在是这样的: MyDomain.com/go ?u=key
但是像 TinyUrl.com 这样的一些服务是这样工作的:TinyURL.com/key !!!
我怎样才能在php中得到这个?
多谢。
您基本上使用mod_rewrite。
使用 mod_rewrite 你可以说所有请求都像
www.example.com/[A-Za-z1-9]
被重定向到:
www.example.com/shorturl.php?key=$1
而 $1 是从请求的 URL 中提取的变量。
使用纯 PHP 没有合适的方法来做到这一点。
重写规则可能如下所示:
RewriteRule ^([A-Za-z1-9]*)$ shorturl.php?key=$1 [L]
我会从重写中排除真正存在的文件,用于此 RewriteCond。
这可以像这里一样完成:
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
# If the request is not for a valid link
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^([A-Za-z1-9]*)$ shorturl.php?key=$1 [L]
(来源:如果文件或目录存在,则 RewriteCond 的 anubhava跳过规则)
创建 .htaccess 文件以将任何对您的域的请求重定向到一个文件让我们说 go.php
所以在 .htacess 中这样做:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ go.php?key=$1 [PT,L]
</IfModule>
这会将 mydomain.com/userkey 之类的任何请求重定向到 mydomain.com/go.php?key=userkey
现在在您的 index.php 中,您可以进行重定向登录。
<?php
$key = $_GET['key'];
// your logic here.
?>