使用mod_rewrite NOT Working更改显示的URL结构

时间:2011-07-28 14:35:19

标签: .htaccess url mod-rewrite

我需要更改显示的客户端URL的结构。我不太熟练使用正则表达式和编码.htaccess文件。基本上,我的结构看起来像:

http://www.example.com/catalog/index.php?cat=lt&sec=lt1-1&id=nmlt10.  

我希望这在地址栏中显示为:

http://www.example.com/catalog/lt/lt1-1/nmlt10.  

这是我提出的,但它没有效果:

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\$ /catalog/index.php?cat=$1&sec=$2&id=$3 [L]

我测试并删除了.htaccess文件中的任何其他规则,以确保没有覆盖任何内容。我在共享主机apache服务器上,并且知道mod_rewrite已启用,因为我用它来重写非www到www网址。我没有收到500条错误消息,我根本没有发现任何变化。我不确定我在哪里出错,所以希望有人能指出我正确的方向。

2 个答案:

答案 0 :(得分:0)

由于您的.htaccess位于网站根文件夹中,因此您应该使用以下规则:

RewriteEngine On
RewriteBase /

RewriteRule ^catalog/([^/]+)/([^/]+)/([^/]+)$ /catalog/index.php?cat=$1&sec=$2&id=$3 [QSA,L]

如果您将其放在/catalog/文件夹中的.htaccess中,则可以从中移除catalog

RewriteEngine On

RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?cat=$1&sec=$2&id=$3 [QSA,L]

我在发布之前测试了规则 - 对我来说很好。


此规则(与上述相同)将检查URL是文件还是文件夹,只有在不是时才会重写:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?cat=$1&sec=$2&id=$3 [QSA,L]

答案 1 :(得分:0)

终于找到了一个有效的解决方案:

RewriteEngine On
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?cat=$1&sec=$2&id=$3 [QSA,L]

欣赏LazyOne的回应,让我走上正轨;但是,使用时:

RewriteEngine On
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?cat=$1&sec=$2&id=$3 [QSA,L]

我无法关注已经放置在网站上的链接,它将不同的目录视为变量,例如,在浏览图像或文件时,例如:

folder/folder/image.png

它会抓取“文件夹” - “文件夹” - 和“图像”作为变量。我明白为什么会这样,如果有人有不同的解决方案或解释,请告诉我,我总是愿意学习。