Apache .htaccess是否可以重写访问URL中未包含的变量

时间:2016-09-28 22:07:34

标签: apache .htaccess mod-rewrite url-rewriting database-connection

我认为这是不可能的,但想要仔细检查。

例如,如果我有网址:

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中的变量写一个重写规则并没有回答我的问题所以请停止投票,因为我不接受你的答案。

2 个答案:

答案 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

希望这很容易理解