php – 使用.htaccess重写mod

我正在尝试使用此信息重写我的模式[从网站上复制],但它不起作用..它有什么问题,并且plz给出正确的答案..

Apache重写引擎主要用于将动态URL(例如www.yoursite.com/product.php?id=123)转换为静态和用户友好的URL,例如www.yoursite.com/product/123

RewriteEngine on
RewriteRule ^product/([^/.]+)/?$product.php?id=$1 [L]

另一个例子,改写自:

www.yoursite.com/script.php?product=123到www.yoursite.com/cat/product/123/

RewriteRule cat/(.*)/(.*)/$/script.php?$1=$2
最佳答案
您似乎误解了重写模块(以及您的规则具体)实际上做了什么.

很简单,当你浏览到:

 localhost/abc/product.php?id=23

RewriteRule不会被调用,也不应该做任何事情.这里没有错,你只是浏览错误的URL

网址转换

http://www.yoursite.com/product/123         <- URL that user goes to
http://www.yoursite.com/product.php?id=123  <- Rewritten URL that the server sees

RewriteRule(s)解释

重写规则分为三个部分(不包括RewriteRule部分……)

>它与url匹配的正则表达式
>它转化为的网址
>其他选项

鉴于你的规则:

RewriteRule ^product/([^/.]+)/?$product.php?id=$1 [L]

正则表达式是:^ product /([^ /.])/?$
新网址:product.php?id = $1
选项:[L]

这意味着用户浏览好的URL http://www.yoursite.com/product/123(并且所有链接指向好的URL)然后服务器与正则表达式匹配并将其转换为新的URL只有服务器才能看到.

实际上,这意味着您有两个指向同一页面的URL …不错的URL和不太好的URL都将带您到同一个地方.不同之处在于,非常好/标准的URL对公众和其他人追踪您的网站是隐藏的.

正则表达式

http://mysite.com/product/image.jpg未被重定向的原因是您在RewriteRule中使用的正则表达式.

说明

^product/([^/.]+)/?$

> ^ =>字符串的开头
> product / =>匹配文字字符串产品/
>([^ /.])=>捕获组匹配一个或多个字符直到下一个/或.
> /?$=>匹配一个可选的/后跟字符串的结尾

鉴于URL:

http://mysite.com/product/image.jpg

你的正则表达式匹配产品/图像,但它遇到了.这会停止匹配…由于这不是字符串$的结尾,规则无效,因此转换永远不会发生.

您可以通过将您的字符类[^ /.]更改为[^ /]或 – 我的首选方法 – 来删除字符类并简单地使用来解决此问题. (无论如何,看到你将所有东西捕获到字符串的末尾

RewriteRule ^product/([^/]+)/?$product.php?id=$1 [L]
RewriteRule ^product/(.+)/?$product.php?id=$1 [L]

转载注明原文:php – 使用.htaccess重写mod - 代码日志