我正在尝试使用此信息重写我的模式[从网站上复制],但它不起作用..它有什么问题,并且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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。