如何为动态重定向

时间:2015-10-04 14:40:01

标签: php .htaccess redirect

我知道这个问题之前已经被多次回答了,但是我还没有看到它以一种解释来理解它是如何工作的方式得到回答。

我希望使用htaccess / web.config文件创建重定向(不确定哪个是正确使用的),它将动态网址重定向到看起来像实际页面/文件夹结构的内容。

例如,www.example.com/index.php?id=1(或简称.com?id=1)中键入的URL应与MySQL数据库一起使用,以便计算出页面ID 1的URL应该是什么样的,例如,数据库的行ID 1表示网址应为" first_page"该网址应重定向至www.example.com/first_page/,并且所有内容均为www.example.com/index.php?id=1

任何人都可以在一般意义上解释这是如何工作的?我理解这只是让我不理解 - 但这就是为什么我希望有人能够有效解释。

编辑:
在Apache服务器上工作,但我想知道这两种情况,因为我需要支持我正在处理的项目

1 个答案:

答案 0 :(得分:0)

我有同样的问题,我想创建一个动态重定向,以启用漂亮的链接/友好的URLS / SEO URL。我记得用户会点击一个链接,然后php会将其重定向到一个漂亮的URL。我的假设是错误的。

您始终可以通过

更改浏览器中显示的网址
window.history.pushState

但这只解决了问题的一部分。网站网址看起来不错,但对搜索引擎无用,如果用户将来会使用此网址,则找不到相同的网页。

我花了一段时间才明白重写网址实际上并没有重写现有网址以匹配浏览器网址,而是将用户输入的浏览器网址重写为与您的文件结构匹配的网址。

因此,如果用户正在寻找

https://www.example.com/pageid/23/joe

重写模块会将其转换为

https://www.example.com/page.php?pageid=23&user=joe

然后可以使用它来获取参数并动态创建Web内容。

在我开始之前,我的参数包含了像下面的那样的用户ID(之前的),这对我没有帮助,因为我希望看到类似(After)的内容 之前:

https://www.example.com/page.php?userid=123

后:

https://www.example.com/user/Joe

使用标准重写规则,这意味着您还需要通过添加用户名作为参数或将userid更改为唯一用户名(替代userid)来更改参数的逻辑。

在web.config(IIS)中,这看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="rule 1T" stopProcessing="true">
                    <match url="^pageid/([^/]*)/([^/]*)$"  />
                    <action type="Rewrite" url="//page.php?pageid={R:1}&amp;user={R:2}"  />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

然后需要对所有内部链接进行第二步:您需要更改它们创建链接的方式。一种方法是创建一个如下所示的全局函数,您可以将现有链接包裹起来,然后将每个链接转换为漂亮的链接。

function L($search) { //Link Rewrite function
        global $LinkArray; //Use global variable with all Links
        foreach ($LinkArrayas $key => $val) {
           if ($val['OrgLink'] === $search) {
               return $val['PrettyLink'];
           }
        }
        return null;            
}

我希望这会有所帮助,即使帖子有点老了。