【发布时间】:2023-03-11 12:04:01
【问题描述】:
我正在使用 WAMP 堆栈,并且我从网上找到的代码拼凑了一个自定义路由功能。这个想法是允许用户将他们的(或任何)用户名添加到网站根 URL 的末尾,路由器 (index.php) 将提取该用户名并提供定制的主页。在 Firefox 中一切正常,但在 Google Chrome 中,路由似乎弄乱了浏览器中的 javascript 函数调用。因此 html 元素 onclick=someFunction() 在错误的 URL 中查找 someFunction()。
例如,假设用户浏览我的网站,并将他们的用户名附加到 url,例如 - www.example.com/@bruce。路由功能(见下面的 index.php)重定向到www.example.com/somePage.php?q=bruce。提供了为 Bruce 定制的页面,但是当 Bruce 单击带有 onclick 事件的元素时,Chrome 会抛出错误:Uncaught TypeError: someFunction() is not a function at HTMLInputElement.onclick (VM509 somePage.php?q=@bruce:44)
任何想法如何解决这个问题,以便我仍然可以路由我的用户?
索引.php:
<?php
//Router
$uri = $_SERVER['REQUEST_URI'];
$user = "";
if(strpos($uri, "@") > 0) {
$user = substr($uri, strpos($uri, "@"));
}
//do a validation on the user name before redirecting
header('Location: somePage.php?q=' . $user); //hardcode url here on deployment
die();
?>
这是我的 .htaccess 文件,如果相关的话(我从关于 PHP 路由的 stackoverflow 答案中复制了这个):
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
编辑以在我的 somePage.php 中添加脚本路径,以防导致问题:
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>SomePage</title>
<link rel="stylesheet" href="./somePage.css">
<script src="./somePage.js"></script>
</head>
【问题讨论】:
-
首先,您的网址之间似乎存在一些差异。在这里的问题中它变成
q=bruce,但是在错误中它是q=@bruce。 -
然而这些问题似乎彼此无关,这是我的猜测。我认为重定向页面没有加载包含
someFunction的 JS 文件 -
嗯,我没有注意到这种差异。 substr 函数不能像我预期的那样工作。
标签: javascript php apache .htaccess routing