1

我只知道 htaccess 是如何工作的,但我总是对写作语法感到困惑,如果有人可以帮助我解决下面的 htaccess 问题,我将不胜感激。

我有几个页面链接到重定向到类似的东西

http://mydomain.com.au/product-details.php/142/categoryAbstract

但由于以前开发人员的错误,除非该 url 是,否则图像不会加载

http://mydomain.com.au/product-details.html/142/categoryAbstract

他将所有 php 页面转换为 html(我真的不知道这样做的目的是什么)但是

现在 url 应该可以工作,即使它是http://mydomain.com.au/product-details.php/142/categoryAbstract

他为此使用了下面的htaccess,但它不起作用。如果我手动将 url 从更改.php.html一切正常。

RewriteRule ^product-details.html/(.*)/(.*)$    product-details.php?productid=$1&category=$2 

我需要一行有效的代码,这样即使 urlhttp://mydomain.com.au/product-details.php/142/categoryAbstract也可以工作。

4

2 回答 2

2

您只需要一个OR(a|b)来考虑这两种可能性:

RewriteRule ^product-details\.(html|php)/(.*)/(.*)$    product-details.php?productid=$1&category=$2 
#---------------------------^^^^^^^^^^^

不过可以稍微改进一下。是贪婪的(.*)比赛。最好将您([^/]+)用作第一个分组以匹配所有内容到下一个/。我还转义了点,因为\.它匹配为文字而不是任何字符

RewriteRule ^product-details\.(html|php)/([^/]+)/(.*)$    product-details.php?productid=$1&category=$2 

.php扩展通常通过重写或实际文件重命名和服务器配置进行修改,.html以便.php对最终用户隐藏一些服务器端信息。为了防止他们知道网站在后端运行什么技术。然而,实际重命名文件.html比使用 URL 重写来隐藏.php.

于 2013-04-26T15:25:13.140 回答
0
RewriteRule ^product-details.html/(.*)/(.*)$ product-details.php?productid=$1&category=$2 

该规则的作用是在最后一个 / 之后product-details.html/和之前获取所有内容,并在最后一个 / 之后获取第二位,直到行尾。然后它将这些位放在 $1 和 $2 所在的位置。

改变它,让它接受 .html 和 .php 你可以改变它

RewriteRule ^product-details(.html|.php)/(.*)/(.*)$ product-details.php?productid=$2&category=$3

因为它看起来你抓取的第一位是数字并且(.*)是一个贪婪的选择器,所以将它替换为 ([0-9]*) 可能会更好,它只会选择数字。这样,如果您的类别中有 /s,您会没事的。给你:

RewriteRule ^product-details(.html|.php)/([0-9]*)/(.*)$ product-details.php?productid=$2&category=$3
于 2013-04-26T15:36:56.633 回答