Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Apache mod_重写链接文件进行路由不起作用_Php_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php 使用Apache mod_重写链接文件进行路由不起作用

Php 使用Apache mod_重写链接文件进行路由不起作用,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我有这样一个功能(它可以工作):在Apache上使用PHP,我设置了htaccess,将所有通用友好的/URL/with/slashes路由到index.PHP。这是我的htaccess代码: RewriteEngine On # Redirect Trailing Slashes... RewriteRule ^(.*)/$ /$1 [L,R=301] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !

我有这样一个功能(它可以工作):在Apache上使用PHP,我设置了htaccess,将所有通用友好的/URL/with/slashes路由到index.PHP。这是我的htaccess代码:

RewriteEngine On

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
出于测试目的,my index.php文件包含非常简单的HTML,并带有指向JavaScript文件的链接,该文件确实存在于正确的路径中:

<!DOCTYPE html>
<html>
<head>
<title>A Test Page Goes Here</title>
    <script src="foo.js" type="text/javascript"></script>
</head>
<body></body>
</html>
当我尝试使用正确的url访问此页面时,不需要调用重定向,效果非常好。像这样:

http://myhost/index.php
当我尝试使用一个url参数访问此页面时,如下所示:

http://myhost/home
http://myhost/pages/home
一切照常进行。页面出现时,JavaScript链接起作用

但当我尝试使用更多url片段访问页面时,如下所示:

http://myhost/home
http://myhost/pages/home
我有两个错误,如下所示:

Uncaught SyntaxError: Unexpected token <

Resource interpreted as Script but 
transferred with MIME type text/html: "http://myhost/home/foo.js".
未捕获的语法错误:意外标记<
资源被解释为脚本,但
使用MIME类型text/html进行传输:http://myhost/home/foo.js".
当我使用浏览器的开发工具查看导致错误的JS代码时,下面是JS文件的内容:与index.php文件返回的HTML完全相同。(因此,难怪会产生JavaScript错误。)

因此,这告诉我的是,从我的HTML代码到foo.js的调用被重定向,index.php的内容被返回,而不是foo.js的内容。但只有当我的URL中有多个元素时才会发生这种情况

顺便说一句,不仅仅是JS工作不正常。。。任何指向CSS文件的链接都会遇到同样的问题(它们从index.php以HTML形式返回)。因此,似乎是链接并返回另一个文件,而不是它是什么类型的文件


所以。。。我被难住了。是否有一些我需要使用的、我没有使用的访问技巧?有人有什么想法吗

将HTML更改为以下内容:

<!DOCTYPE html>
<html>
<head>
<title>A Test Page Goes Here</title>
    <script src="/foo.js" type="text/javascript"></script>
</head>
<body></body>
</html>

这里有一个测试页面

我刚发布这篇文章,就想尝试使用站点相对路径或绝对路径访问所有资源。。。解决了问题。然而在这种情况下,有没有办法使用相对链接?在一个被路由的页面中只需要根相对链接似乎是相当困难的。首先,恭喜你认识到了问题所在(许多开始使用mod_rewrite的人都不知道)。现在,对于使用引用域根的路径来引用外部资源,这是一种非常常见的做法。如果您希望能够保持项目的灵活性,因为您可以在某个时候将其移动到更深的子目录中,建议将基本路径配置为常量或类似的内容,您可以将其用作需要输出的每个此类路径的前缀。[…][…]首先,可以是
/
——然后您只需将其输出为
,感谢这里提供的快速而全面的详细信息。我想是时候拥抱根相对链接了。正如你所说的,整个BASE_路径常数也将在那里工作。是的,我的发现(以及其他评论提到的)。谢谢大家的回答。如果我在URL中使用斜杠,即使它将被重定向,这些斜杠也会成为浏览器确定文档相对链接的一部分。