apache - 创建简单的htaccess URL重写

  显示原文与译文双语对照的内容

我在托管的Apache服务器上编写简单的。htaccess时遇到困难。

我阅读的所有教程都使用 正规表达式 来使复杂的url更加友好,特别是动态创建的url 。

一个示例: RewriteRule ^product/([^/.]+)/?$ product.php?id=$1 [L] 将会改变 www.yoursite.com/product.php?id=123www.yoursite.com/product/123

但是,这并不像我想的那样友好。 在使用动态url的站点中,我想更改 /index.php?main_page=product_info&cPath=0&products_id=97http://www.example.com/product-name-a

所以我尝试了:


Options +FollowSymLinks
RewriteEngine On
RewriteRule/index.php?main_page=product_info&cPath=0&products_id=97 http://www.example.com/product-name-a
RewriteRule/index.php?main_page=product_info&cPath=0&products_id=98 http://www.example.com/product-name-b
RewriteRule/index.php?main_page=product_info&cPath=0&products_id=99 http://www.example.com/product-name-c

没有生成错误,但它不工作。

这是不是可以? 如果是的话,我的语法是否不好? 如果不可能,任何人都可以提出重写( 未重定向) 单个url的方法?

我知道不使用 正规表达式 意味着更多的手工工作。 我已经准备好了。 这里数据来自一个文本文件,我将创建一个。 我没有询问关于数据库访问或者与数据来源有关的任何东西。

我不认为这是一个重复的问题:

  • 其他问题涉及重写或者重定向部分内容,而不是完整的URL 。
  • 其他问题最终与 正规表达式 有关,因为请求是针对操作而不是替换的。

谢谢。

时间: 作者:

Is this possible to do? If so, is my syntax bad?

RewriteRule MATCH query查询字符串中的问题,因为 RewriteRule 用于 MATCH,仅用于请求请求 URI 。

更改你的规则以使它的工作:


RewriteCond %{THE_REQUEST} s/+index.php?main_page=product_info&cPath=0&products_id=97 [NC]
RewriteRule ^/product-name-a? [R=302,L]

RewriteRule ^product-name-a/?$/index.php?main_page=product_info&cPath=0&products_id=97 [L,QSA]

这里 RewriteCond 使用 THE_REQUEST 变量表示Apache从你的浏览器接收到的原始请求。

参考: Apache mod_rewrite简介

作者:
...