Apache .htaccess 能否重写访问 URL 中未包含的变量
Can an Apache .htaccess rewrite access a variable not contained in the URL
我认为这是不可能的,但想仔细检查一下。
如果我有 URL:
http://www.example.co.uk/products.php?id=1
我知道使用基本重写规则我可以使用 id 变量将 URL 更改为任何内容,例如:
http://www.example.co.uk/products/1
例如,假设数据库也有行"product_name"。
它没有在 URL 中声明。
是否可以在不将 "product_name" 变量添加到 URL 的情况下访问重写规则中 "id = 1" 的 product_name 行的值?
例如,如果数据库条目值为:
id = 1
product_name = 'lemon'
您能否创建一个重写规则来动态更改以下内容:
http://www.example.co.uk/products.php?id=1
到
http://www.example.co.uk/products/lemon
我知道理想的情况是只解析 "product_name" 而不是 "id"(我已经这样做了)。
我只是好奇这是否真的可能。
编辑: 我认为人们对我的问题感到困惑,我想问的是是否有办法在不将 product_name 变量放入源代码的情况下做到这一点 URL.
Edit2: 为什么人们总是回复如何做一个正常的重写规则。这不是我的问题,我不是在问你如何重写规则或问它们是如何工作的,我知道这已经在我原来的问题中解释过了,如果你真的懒得去读的话。
我想问是否可以从 URL 中未包含的数据库访问变量。
从字面上看,无论如何都存在,即使这样做是疯狂和糟糕的做法。您能否访问数据库 product_name 中的行,仅使用 .htaccess 文件中 URL 中的 id 行(不是来自 PHP 文件),否是一个合法的答案不可能。告诉我如何使用 URL 中的变量编写重写规则并没有回答我的问题,所以不要因为我不接受你的回答而投票给我。
如果您想要真正的动态解决方案,请阅读以下内容:
我们想通过 url 传递产品名称而不让用户知道我们这样做:
RewriteRule ^products/(.*)$ products.php?product_name= [NC]
## i.e products/lemon server will understand it like: products.php?product_name=lemon
## i.e products/something_i_dont_know rewrite it to products.php?product_name=something_i_dont_know
而用户仍然会在他的浏览器中看到 products/something_i_dont_know
url 栏,就像 "MASK"
如果你想传递 2 个变量(不仅仅是 1 个)那么我们这样做
RewriteRule ^products/(.*)/id/(.*)$ products.php?product_name=&id= [NC]
如果您想从 ID 为 的数据库中动态地 提取产品信息,那么这样做:
RewriteRule ^products/([0-9]*)$ products.php?id= [NC]
//you pull it from db like this
$id = $_GET['id'];
$sql= 'SELECT * FROM products WHERE id="'.$id.'"';
摘要 用户输入域。com/products/1 服务器将其重写为 products.php?id=1
用户输入域。com/products/2服务器将其重写为products.php?id=2
用户输入域。com/products/3服务器将其重写为products.php?id=3
等等,
注:先到的( )
取</code>,后取<code>
希望容易理解
虽然这甚至可能是可行的(prg: External Rewriting Program),但真的,只是不要这样做。编写一个简单的 php(或其他)脚本。
您有 prg:
示例 here,但请先阅读评论 :)
我认为这是不可能的,但想仔细检查一下。
如果我有 URL:
http://www.example.co.uk/products.php?id=1
我知道使用基本重写规则我可以使用 id 变量将 URL 更改为任何内容,例如:
http://www.example.co.uk/products/1
例如,假设数据库也有行"product_name"。 它没有在 URL 中声明。 是否可以在不将 "product_name" 变量添加到 URL 的情况下访问重写规则中 "id = 1" 的 product_name 行的值?
例如,如果数据库条目值为:
id = 1
product_name = 'lemon'
您能否创建一个重写规则来动态更改以下内容:
http://www.example.co.uk/products.php?id=1
到
http://www.example.co.uk/products/lemon
我知道理想的情况是只解析 "product_name" 而不是 "id"(我已经这样做了)。 我只是好奇这是否真的可能。
编辑: 我认为人们对我的问题感到困惑,我想问的是是否有办法在不将 product_name 变量放入源代码的情况下做到这一点 URL.
Edit2: 为什么人们总是回复如何做一个正常的重写规则。这不是我的问题,我不是在问你如何重写规则或问它们是如何工作的,我知道这已经在我原来的问题中解释过了,如果你真的懒得去读的话。
我想问是否可以从 URL 中未包含的数据库访问变量。 从字面上看,无论如何都存在,即使这样做是疯狂和糟糕的做法。您能否访问数据库 product_name 中的行,仅使用 .htaccess 文件中 URL 中的 id 行(不是来自 PHP 文件),否是一个合法的答案不可能。告诉我如何使用 URL 中的变量编写重写规则并没有回答我的问题,所以不要因为我不接受你的回答而投票给我。
如果您想要真正的动态解决方案,请阅读以下内容:
我们想通过 url 传递产品名称而不让用户知道我们这样做:
RewriteRule ^products/(.*)$ products.php?product_name= [NC]
## i.e products/lemon server will understand it like: products.php?product_name=lemon
## i.e products/something_i_dont_know rewrite it to products.php?product_name=something_i_dont_know
而用户仍然会在他的浏览器中看到 products/something_i_dont_know
url 栏,就像 "MASK"
如果你想传递 2 个变量(不仅仅是 1 个)那么我们这样做
RewriteRule ^products/(.*)/id/(.*)$ products.php?product_name=&id= [NC]
如果您想从 ID 为 的数据库中动态地 提取产品信息,那么这样做:
RewriteRule ^products/([0-9]*)$ products.php?id= [NC]
//you pull it from db like this
$id = $_GET['id'];
$sql= 'SELECT * FROM products WHERE id="'.$id.'"';
摘要 用户输入域。com/products/1 服务器将其重写为 products.php?id=1
用户输入域。com/products/2服务器将其重写为products.php?id=2
用户输入域。com/products/3服务器将其重写为products.php?id=3
等等,
注:先到的( )
取</code>,后取<code>
希望容易理解
虽然这甚至可能是可行的(prg: External Rewriting Program),但真的,只是不要这样做。编写一个简单的 php(或其他)脚本。
您有 prg:
示例 here,但请先阅读评论 :)