0

这是我的第一个问题:

我在 PHP 中创建了一个 URL Shortner 服务。它完全没有任何问题,但是有一个问题:

想要访问他的 url 的人应该输入:MyDomain.com/go.php ?u=key 在这里我尝试通过配置 apache 来删除.php扩展名并工作。现在是这样的: MyDomain.com/go ?u=key

但是像 TinyUrl.com 这样的一些服务是这样工作的:TinyURL.com/key !!!

我怎样才能在php中得到这个?

多谢。

4

2 回答 2

1

您基本上使用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跳过规则

于 2014-05-13T07:08:05.160 回答
0

创建 .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. 

?>
于 2014-05-13T07:12:46.390 回答