Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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,我有来自不同来源(论坛、博客…)的用户访问我的网站,他们的链接已经不存在了,所以出现了404错误。根据他们在我的网站上访问的链接,我知道将他们发送到哪里。因此,链接如下所示: www.test.com/shop/customers/individuals/343a/?shopc=variable www.test.com/shop/customers/company/445a/?shopc=variable www.test.com/shop/b2b/discount/43b/?shopc=va

我有来自不同来源(论坛、博客…)的用户访问我的网站,他们的链接已经不存在了,所以出现了404错误。根据他们在我的网站上访问的链接,我知道将他们发送到哪里。因此,链接如下所示:

www.test.com/shop/customers/individuals/343a/?shopc=variable
www.test.com/shop/customers/company/445a/?shopc=variable
www.test.com/shop/b2b/discount/43b/?shopc=variable
...
等等

如您所见,所有链接都有www.test.com/shop/和变量shopc。我要做的是重定向到正确的位置。让我给你一个例子,2个用户访问我的网站,我想做什么。因此,用户使用以下URL进入我的网站:

www.test.com/shop/low/index.php?shopc=variable
www.test.com/shop/company/b2b/index.php?shopc=variable
现在显示404错误,因为文件和目录

/hsphere/local/home/danuser/test.com/shop/low/index.php
/hsphere/local/home/danuser/test.com/shop/company/b2b/index.php
不再存在于我的网站上。但是根据shopc变量,我知道将它们重定向到哪里

所以问题是:我可以创建一个.htaccess文件来重定向链接吗

www.test.com/shop/company/b2b/user/index.php?shopc=variable


所以我可以获取shopc变量并将它们重定向到正确的位置?

我花了一些时间才找到您的问题。问题是查询字符串与mod_rewrite regex不匹配

解决问题的代码如下所示:

RewriteEngine On
RewriteCond %{QUERY_STRING} shopc=(\w+)
RewriteRule ^(\w+/)*$ index.php [L]
它使用RewriteCond检查变量shopc是否已设置

这就是为什么我的第一条规则不起作用,为什么不是你问题的解决方案

#RewriteRule ^(/\w)+/?shopc=(\w+)$ index.php?shopc=$2 [NC,L]
无论如何,如果您可以访问httpd配置,我建议您不要使用.htaccess,因为与propper服务器配置相比,.htaccess速度较慢。因为使用.htaccess,Web服务器必须在每个目录中查找.htaccess文件。

在商店目录的.htaccess文件中:

RewriteEngine On
RewriteBase /shop

RewriteRule ^.*$ index.php [L,QSA]
标志
QSA
自动将查询字符串附加到替换请求上。这就是“shopc”的传播方式。更多信息,请参阅


当我转到此URL时:

…我从我的/shop/index.php文件中的
print\r($\u-get)
获取此输出:


你是说你不需要保留“个人”、“公司”、“折扣”和其他信息吗?是的,我需要重定向通过www.test.com/shop/的所有信息。在你的上一个示例中,你不需要将路径
company/b2b/user
发送到index.php文件吗?不,我只需要shopc变量。你得到了什么错误?.htaccess是否在“shop”目录中?我在我的电脑上再次测试了它,它正常工作了。我们可能有一些不同的配置。我可以向您发送我的测试服务器信息,以便您可以测试它。我不知道该怎么做。htaccess正在工作(已启用)首先,.htaccess文件在哪个目录下?从服务器根目录开始。下一个问题,index.php文件在哪个目录中?这个家伙滥用我们的专业知识,在我们的两条评论上都发布了相同的回复,而没有努力让两个有效的解决方案工作。这两种解决方案都是有效的,因为问题问得太糟糕了,没有明确说明他喜欢得到什么。是的,问题表述得很糟糕,这是因为我的英语不好。我将尝试重新表述这些问题。对不起,我想滥用你的专业知识。我不是。我测试了你的两个答案,但他们都在做我想做的事。我将重新制定我的问题,确保启用mod rewrite并支持rewriteconds。我在发布之前测试了代码。指定“不工作”。可能会设置一个用于调试的重写日志。我可以向您发送我的测试服务器信息,以便您可以测试它。我不知道该怎么做。htaccess正在工作(已启用)发布重写日志。在我阅读了4-5遍我的问题后,我明白你是对的。我重新制定了它。很抱歉给您带来麻烦,谢谢您的帮助。您可以修改我代码的重写条件。请把我的答案投赞成票,并记为正确
RewriteEngine On
RewriteBase /shop

RewriteRule ^.*$ index.php [L,QSA]
Array
(
    [shopc] => variable
)