我认为这是不可能的,但想要仔细检查。
例如,如果我有网址:
http://www.example.co.uk/products.php?id=1
我知道使用基本的重写规则我可以使用id变量将URL更改为任何内容,例如:
http://www.example.co.uk/products/1
让我们说例如数据库也有行" product_name"。 它未在URL中声明。 是否可以访问product_name行的值,其中" id = 1"在重写规则中没有添加" product_name"变量到URL?
例如,如果数据库条目值为:
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中的变量。 无论如何,根本就是在那里,即使这样做是疯狂和糟糕的做法。您是否可以使用.htaccess文件中的URL中的id行(不是来自PHP文件)访问数据库product_name中的行,如果不可能,则不是合法答案。告诉我如何用URL中的变量写一个重写规则并没有回答我的问题所以请停止投票,因为我不接受你的答案。
答案 0 :(得分:1)
虽然这可能是可行的(使用prg: External Rewriting Program),但实际上,就是不要这样做。写一个简单的php(或其他)脚本。
您拥有prg:
示例here,但请先阅读评论:)
答案 1 :(得分:-1)
如果你想要真正的动态解决方案,请阅读:
我们希望通过网址传递产品名称,而不让用户知道我们这样做:
RewriteRule ^products/(.*)$ products.php?product_name=$1 [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
,就像" MASK"
如果你想传递2个变量(不仅仅是1个),那么我们就像这样做
RewriteRule ^products/(.*)/id/(.*)$ products.php?product_name=$1&id=$2 [NC]
如果您想从id 动态的数据库中提取产品信息,那么这样做:
RewriteRule ^products/([0-9]*)$ products.php?id=$1 [NC]
//you pull it from db like this
$id = $_GET['id'];
$sql= 'SELECT * FROM products WHERE id="'.$id.'"';
摘要用户输入domain.com/products/1服务器将其重写为products.php?id = 1
用户输入domain.com/products/2服务器将其重写为products.php?id = 2
用户输入domain.com/products/3服务器将其重写为products.php?id = 3
等等,
注意:首先出现的( )
需要$1
,后者需要$2
希望这很容易理解