Htaccess url重写,新文件夹,但文件加载在父文件夹

时间:2017-05-26 22:02:32

标签: php .htaccess mod-rewrite

我的.htaccess文件将http://example.com/animal.php?id=number更改为http://example.com/animal/number

如果我转到http://example.com/animal/number,此代码会在animal.php文件夹中加载/animal个其他文件,但此文件夹不存在。

如果我转到/animal/number页面,我希望它可以正常工作,代码会在父文件夹(animal.php)中加载http://example.com/个其他文件。

示例:我在header.php中包含animal.php,这是有效的,但如果我转到/animal/number页面,则不是工作,因为header.php不在/animal文件夹中。

我的.htaccess文件:

<IfModule mod_rewrite.c>  
    RewriteEngine on  

    #RewriteBase /htdocs/test

    RewriteRule    ^animal/([A-Za-z0-9-]+)/?$    animal.php?id=$1    [NC,L]

    RewriteCond %{REQUEST_FILENAME} !-f  
    RewriteCond %{REQUEST_FILENAME} !-d  
    RewriteRule ^(.*)$ index.php?page=$1 [QSA]  
</IfModule>

1 个答案:

答案 0 :(得分:0)

您似乎描述的是客户端相对URL问题。如果您在客户端HTML中使用 relative URL,那么相对于/animal“子目录”自然会请求任何资源(CSS,JS,图像等)(如URL),而不是文档根目录(实际文档的位置)。浏览器只能看到URL,而不是底层的文件系统路径。

您需要通过在客户端HTML中使用根相对URL(以斜杠开头)或绝对URL(方案+主机名)来解决此问题。或者,您可以在HTML的base部分设置head元素,告知浏览器在解析相对链接/网址时使用哪个URL作为基本网址。 (但是,请注意,如果您使用仅包含片段标识符的页内链接,例如base形式,则使用href="#internal-id"元素时会有一些警告 - 因为这被认为是相对的 URL。)

  

我包括header.php in animal.php`

HOWEVER ...“包括header.php”意味着服务器端包含(例如include('header.php')),它与URL结构,相对URL(在HTML中)无关,因此与URL重写和您的.htaccess文件无关。

除非......你把它包含在某种JavaScript AJAX请求中(甚至是 frame )? (因此我在上面的评论中查询。)在这种情况下,如上所述会出现相同的相对URL问题。