Php 使用.htaccess重写Mod
我正试图使用此信息[从网站复制]重写我的模式,但它不起作用。。有什么问题,请给出正确答案 Apache重写引擎主要用于将动态url(如www.yoursite.com/product.php?id=123)转换为静态且用户友好的url(如www.yoursite.com/product/123)Php 使用.htaccess重写Mod,php,.htaccess,mod-rewrite,url-rewriting,Php,.htaccess,Mod Rewrite,Url Rewriting,我正试图使用此信息[从网站复制]重写我的模式,但它不起作用。。有什么问题,请给出正确答案 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/
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
重写规则未被调用,不应执行任何操作。这里没有问题,您只是浏览到了错误的URL
URL转换
正则表达式是:^product/([^/]+)/?$
新的url:
product.php?id=$1
选项:
[L]
这意味着用户浏览到nice urlhttp://www.yoursite.com/product/123
(您的所有链接都指向nice URL),然后服务器根据正则表达式进行匹配,并将其转换为只有服务器才能看到的新URL
实际上,这意味着您有两个指向同一页面的URL。。。好的URL和不好的URL都会把你带到同一个地方。不同的是,不好的/标准的URL对公众和其他追求你的网站的人是隐藏的
正则表达式
http://mysite.com/product/image.jpg没有被重定向是因为您在重写规则中使用了正则表达式
解释
^
=>字符串的开头
product/
=>匹配文本字符串product/
([^/]+)
=>在下一个/
或
之前匹配一个或多个字符的捕获组
/?$
=>匹配可选的/
,后跟字符串的结尾
给定URL:
http://mysite.com/product/image.jpg
您的正则表达式匹配产品/图像
,但随后遇到
,从而停止匹配。。。因为这不是字符串$
的结尾,所以规则无效,因此转换永远不会发生
您可以通过将字符类[^/]
更改为仅[^/]
或-我的首选方法-删除字符类,只需使用+
(不管怎样,只要将所有内容捕获到字符串末尾即可)
RewriteRule ^product/([^/]+)/?$ product.php?id=$1 [L]
RewriteRule ^product/(.+)/?$ product.php?id=$1 [L]
嗯,你是如何在你的网站上使用它的?当前的URL看起来像什么?从一个网站复制代码并期望我们修复它不是这样的。请提供有关你的设置和你在本地wampserver中尝试的内容的信息,但是当我访问localhost/abc/product.php时什么都没有发生?id=23,它没有改变。你启用了该模式吗在apache中为WAMP编写模块?是的,我启用了,启用后您是否重新启动了WAMP?只是试图消除导致iti的任何小问题我使用了它,但它仍然不起作用..(:'(,什么也没发生?但是什么不起作用?您是否收到错误?它是否显示了页面?您确定您获得的是基于$id变量的项目信息吗?没有错误,页面加载应该是这样的..就像此代码没有任何效果,没有错误,没有更改,我应该将此.htaccess文件放在abc文件夹或localhostin的根目录中的什么位置abc/folder.但是你不应该去localhost/abc/product.php?id=121你应该去localhost/abc/product/121thanx所有的工作,,,该死的,我错过了这个机会…thanx你保存了我的工作你能给我一个文件(css/image)的例子吗这不起作用吗?一切正常,我只需要将abc/product.php?id=121更改为abc/121,css和图像也链接到这两种URL中..Thanx但是我是如何将mysite.com/abc/product.php?id=mypic.jpg转换为mysite.com/abc/mypic.jpgOkay的,为了澄清,我假设您正在使用脚本生成图像?因此您希望用户转到:http://mysite.com/abc/image.jpg
然后是要查看的脚本http://mysite.com/product.php?id=image.jpg
?
RewriteRule ^product/([^/.]+)/?$ product.php?id=$1 [L]
^product/([^/.]+)/?$
http://mysite.com/product/image.jpg
RewriteRule ^product/([^/]+)/?$ product.php?id=$1 [L]
RewriteRule ^product/(.+)/?$ product.php?id=$1 [L]