干净的URL在前端管理,没有标签

时间:2018-10-13 08:08:22

标签: javascript html apache .htaccess web

我想拥有example.com/amsterdam这样的网址,我知道您可以像example.com/#/amsterdam这样。

但是我不想在URL中使用/#/部分。我想我需要为此修改.htaccess,但是我没有在互联网上找到一个很好的例子。

我想要的是当有人导航到example.com/amsterdam时 我希望它转到可以通过javascript处理/ amsterdam的主页,以便可以在主页上显示amsterdam文本,并将example.com/amsterdam放在Google的sitemap.xml中。

我尽力解释这一点。如果您对如何完成此操作有任何直觉,请随时回复

1 个答案:

答案 0 :(得分:1)

好吧,这很难上班,但我是按照以下方式完成的。

我在我的.htaccess FallbackResource index.php中添加了以下行,以确保您使用的是新版本的apache,因为这是apache的新功能。该操作是在找不到所需的页面时转到index.php页面,而不是标准的404。

然后,我添加了一个index.php页面,其中包含以下代码

$whitelist = [
    "Rotterdam",
    "Amsterdam",
];

$cwhitelist = [];

foreach ($whitelist as $key => $value) {
    array_push($cwhitelist,strtolower($value));
}

$urlpath = strtolower(basename(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)));
$inarr = in_array($urlpath,$cwhitelist);
if(!$inarr){
    $actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    if($actual_link != "https://www.slotenmakergroep.nl/"){
            if( $actual_link != "http://www.slotenmakergroep.nl/"){
                session_start();
                $_SESSION["link"] = $actual_link;
                header("Location: 404.php",true,301);
            }

    }
}

这是下面的操作,我批准了一个列入白名单的链接的白名单数组,然后将它们全部变为小写。

之后,我将URL和斜线后的文本作为文本,并检查该文本是否在数组中。如果它在数组中,我还要检查它的http链接还是https链接。

如果链接不在白名单中,我将其发送到404.php页面,并在会话中保存他们尝试访问的链接。