我有来自不同来源(论坛,博客......)的用户来自不再存在的链接,因此出现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。我想要做的是重定向到正确的位置。让我举两个用户访问我的网站和我想做的例子。因此,用户使用此网址进入我的网站:
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
到
www.test.com/shop/index.php?shopc=variable
所以我可以抓住shopc变量并将它们重定向到正确的位置?
答案 0 :(得分:0)
我花了一些时间才找到你问题的the answer。问题是查询字符串与mod_rewrite正则表达式不匹配。
应该解决您问题的代码如下:
RewriteEngine On
RewriteCond %{QUERY_STRING} shopc=(\w+)
RewriteRule ^(\w+/)*$ index.php [L]
它使用RewriteCond检查您的变量shopc是否已设置。
这就是为什么我的第一条规则不起作用以及为什么escaping the ? character in an RewriteRule不是您问题的解决方案。
#RewriteRule ^(/\w)+/?shopc=(\w+)$ index.php?shopc=$2 [NC,L]
无论如何,如果你有权访问httpd配置,我建议你不要使用.htaccess,因为.htaccess与propper服务器配置相比速度慢。因为使用.htaccess,网络服务器必须在每个目录中查找.htaccess文件。
答案 1 :(得分:0)
在 shop 目录的.htaccess文件中:
RewriteEngine On
RewriteBase /shop
RewriteRule ^.*$ index.php [L,QSA]
标志QSA
会自动将查询字符串附加到替换请求上。这就是'shopc'的传递方式。有关详情,请参阅Apache mod_write online documentation。
当我转到此网址时:
http://localhost/shop/company/b2b/user/index.php?shopc=variable
...我从 /shop/index.php 文件中的print_r($_GET)
获取此输出:
Array
(
[shopc] => variable
)