我需要更改显示的客户端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条错误消息,我根本没有发现任何变化。我不确定我在哪里出错,所以希望有人能指出我正确的方向。
答案 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
它会抓取“文件夹” - “文件夹” - 和“图像”作为变量。我明白为什么会这样,如果有人有不同的解决方案或解释,请告诉我,我总是愿意学习。