4

这是我的第二篇文章,因为我也找不到解决方案,所以我期待您的帮助。我公司的网站是由一名离职员工创建的。他使用 htaccess 文件来交换网站中的所有链接。现在,当我想通过地址栏将变量从一页传递到第二页时,由于htaccess的影响,第二页无法获取变量。当我对 htaccess 文件的经验很少时,任何人都可以帮助我找到修改 htaccess 的解决方案。这是 htacess 文件。

RewriteEngine On
Options All -Indexes
DirectoryIndex index.php
RewriteRule ^index\.html$ index.php
RewriteRule ^B2C/(.*)/(.*)/(.*).html$ index.php?lang=$1&p=$2&id=$3
RewriteRule ^B2C/(.*)/(.*).html$ index.php?lang=$1&p=$2
RewriteRule ^B2C/(.*)/$ index.php?lang=$1
RewriteRule ^postoffice.html$ more/PO.php
RewriteRule ^hospital-clinic.html$ more/HO.php
ErrorDocument 401 /errors/401.html
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html

这是我在标签中的代码,它想在页面“1”中传递变量 $main_po_num

echo "<td><a href='B2C/$lang/Contact_detail.html?abc=$main_po_num'>$main_po_num</a></td>";

这是我在“2”页中转储的代码,它返回 NULL(意味着无法获取传递变量)

var_dump ($_GET["abc"]);

连地址栏也能显示变量

.64.4:1234/B2C/vi/Customer_Contact?abc=S110023845.html

那么如何修改 htacess 然后我可以通过并获取 2 页之间的变量。谢谢

4

3 回答 3

4

在所有重写规则的末尾添加[qsa]

这将添加 get 变量。

于 2012-05-25T02:39:05.747 回答
4
RewriteRule ^B2C/(.*)/$ index.php?lang=$1 [QSA]

[QSA]标志将查询字符串(在您的情况下为abc)附加到此规则。目前,您的规则会忽略传递的查询字符串并仅使用lang等变量。要将此应用于您的所有规则,每个规则最后都需要此标志。

mod_rewrite 文档

修改查询字符串

默认情况下,查询字符串会原封不动地传递。但是,您可以在包含查询字符串部分的替换字符串中创建 URL。只需在替换字符串中使用问号来指示应将以下文本重新注入到查询字符串中。当您想删除现有的查询字符串时,只用问号结束替换字符串。要组合新旧查询字符串,请使用 [QSA] 标志。

于 2012-05-25T02:39:20.023 回答
2

我有一段时间没有使用 htaccess 了,所以这只是一个相当有根据的猜测,但你可以试一试。

这一行:

RewriteRule ^B2C/(.*)/(.*).html$ index.php?lang=$1&p=$2

正在研究您的示例:

<a href='B2C/$lang/Contact_detail.html?abc=$main_po_num'>$main_po_num</a>;

基本上发生的事情是第一个 (. ) 被重写以插入到 $1 中,第二个 (. ) 被替换到 $2 中。

所以,我又不是 100% 这是正确的语法,所以你可能需要查看它,但你应该能够执行以下操作:

RewriteRule ^B2C/(.*)/(.*).html/?(.*)$ index.php?lang=$1&p=$2&$3
于 2012-05-25T02:45:45.937 回答