2013-04-26 53 views
1

我刚刚知道htaccess是如何工作的,但我总是与写作语法混淆,我很感激任何人都可以帮助我解决下面的htaccess问题。在.htaccess中重写语法

我有几页链接重定向到像

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

,但由于以前开发的图像不加载错误,除非该网址是

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

他全部转换PHP页面到HTML(我真的不知道这是什么意图)但

现在的网址应该工作,即使它作为http://mydomain.com.au/product-details.php/142/categoryAbstract

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

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

我需要一个工作代码行,以便即使url http://mydomain.com.au/product-details.php/142/categoryAbstract应该工作。

+0

以前的开发人员是否实际将所有页面转换为HTML,或者他是否在htaccess文件中创建了一条可更改扩展名的行?你可以看看你的htaccess文件,看看这样的行是否存在? – 2013-04-26 15:24:54

+0

他只是写了一行,即使他在浏览器中调用phpinfo.html正在运行。 – Kerry 2013-04-26 15:26:00

回答

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的次数要少。

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] *)替换它只会选择数字。这样,如果你有任何问题,你会没事的。给你:

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