Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用.htaccess重写Mod_Php_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

Php 使用.htaccess重写Mod

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/

我正试图使用此信息[从网站复制]重写我的模式,但它不起作用。。有什么问题,请给出正确答案

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
重写规则未被调用,不应执行任何操作。这里没有问题,您只是浏览到了错误的URL

URL转换 正则表达式是:
^product/([^/]+)/?$

新的url:
product.php?id=$1

选项:
[L]

这意味着用户浏览到nice url
http://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]