Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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 两个htaccess文件_Php_.htaccess - Fatal编程技术网

Php 两个htaccess文件

Php 两个htaccess文件,php,.htaccess,Php,.htaccess,我有一个关于使用多个.htaccess文件的问题-我在stackoverflow上的其他地方找不到这个问题的答案,所以我希望你们能提供帮助 目前,我的网站根目录中有一个.htaccess文件,它执行简单的url重写: Options -MultiViews # CheckSpelling off RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-

我有一个关于使用多个
.htaccess
文件的问题-我在stackoverflow上的其他地方找不到这个问题的答案,所以我希望你们能提供帮助

目前,我的网站根目录中有一个
.htaccess
文件,它执行简单的url重写:

Options -MultiViews
# CheckSpelling off
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?url=$1 [L]
ErrorDocument 404 /index.php
我目前正在开发这个网站的第二阶段,我在一个子文件夹中制作了一个副本(例如www.abcdef.com/new/)。问题是,现在如果我单击这个复制站点上的链接,它会将我重定向到根目录的原始页面,而我希望它转到新/文件夹中的等效页面。我将另一个
.htaccess
文件放在这个新的/文件夹中,但没有任何明显的效果:

Options -MultiViews
# CheckSpelling off
RewriteEngine On
RewriteBase /new/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /new/index.php?url=$1 [L]
ErrorDocument 404 /index.php
所以我的问题是:允许在这样的子文件夹中有另一个
.htaccess
文件吗?如果是这样的话,为什么上面的线路不起作用


提前感谢您对这方面的任何想法

在子目录中有第二个htaccess文件不应该是个问题,据我所知,您的两个看起来还不错


您确定站点中的链接正确吗?(例如,它们是
/new/foo
,而不仅仅是
/foo
)?

可以有多个.htaccess文件,并且系统设计为按您希望的方式工作

您正在设置
RewriteBase
,这将导致

因此,您的请求似乎会被重写到
/new/new/index.php
,这是一个路径和目录,可能在您的文件系统中不存在(因此不符合您的
重写条件),并且会被重定向到/index.php 404

作为测试,可以尝试将
ErrorDocument
更改为:

ErrorDocument
404/new/index.php

如果您看到重写的调用转到这里,那么它可能确实是您所说的
RewriteBase

问题是,现在如果我点击这个复制站点上的链接, 它将我重定向到根,原始页面,而我希望它转到 新/文件夹中的等效页


是否您在页面中使用的是绝对链接而不是相对链接?例如,如果一个链接看起来像
“/sample”
,当它在主站点中时,它将链接到
http://.../sample
如果链接位于
“/new/”
下的页面内,则情况也是如此。如果您只使用
“sample”
,那么它将解析为
http://..../sample
http://...../new/sample
,具体取决于页面的URL。

您可以拥有任意多个.htaccess级别,但它们是按目录树深度的顺序处理的。如果较高的.htaccess在到达较低的.htaccess之前重定向到其他地方,则较低的.htaccess将永远不会被加载/解析/执行。谢谢,你说得对-我使用的是绝对链接,即/sample。问题是,在原来的网站上有数百个这样的链接,所以我不能更改它们。你知道有没有办法重写它们以转到子文件夹吗?我不认为有快速的解决方法。通常,它们不应以“/”开头。你能在文件中搜索
“/
”吗?也许这个搜索会找到你所有的“错误根目录”HREF?好的,有进展了。大多数链接都在数据库中,所以我修改了将它们写入页面的代码以删除首字母“/“。然而,这些仍然是重写到根!我想这可能是我的问题的答案……请注意——浏览器一定在缓存旧代码。它现在开始工作了!非常感谢你的帮助!很高兴能帮上忙。顺便说一句,我想你也可以扔掉你的第二个
.htaccess
文件?他们不会去404——他们会去正确的页面,但在原始站点,而不是在new/中的副本。这可能是因为,正如CyberDude在下面所说,我使用的是绝对链接。谢谢你的回复。不,链接只是到/foo,不是到/new/foo。我希望我能够保留现有的链接(其中有数百个)并将它们重定向到本地文件夹(new/)。这将涉及重写HTML内容,而mod_rewrite
不行。你可以做一些可怕的,可怕的魔术,包括检查推荐人字段…但这确实是最后的手段,因为一旦有人复制并粘贴链接,它就会中断。大卫,谢谢你的帮助,你和cyberdude是对的,现在我调整了绝对链接,它正在工作。干杯