我已经完成了尽职调查,花了几个小时仔细研究搜索和堆叠QA。没有骰子。所以我终于到这里来请求帮助。
我有脏网址:
.cc/store/index.php?route=checkout/cart
.cc/store/index.php?route=common/home
.cc/store/index.php?route=product/product&product_id=111
我想清理它们,以便当用户点击脏链接或键入脏URL时,它们会在地址栏中显示一个干净的URL:
.cc/store/cart
.cc/store/home
.cc/store/product/11
目前我的htaccess文件位于:
.cc/store/.htaccess
我知道我需要htaccess:
RewriteEngine On
但这是正确的道路吗?:
RewriteRule !/index.php?route=(A-Z)/(A-Z)&(*)$ /$2/$3
问题1:我是否需要编辑htaccess文件或者还需要编写一些php吗?
Q2:我写了什么htaccess / php代码来获得所需的干净网址?我想在浏览器的地址栏中看到干净的网址。
提前致谢。
答案 0 :(得分:1)
无论是生成这些URL,无论是PHP还是简单的HTML,都需要更新以包含新的URL。 mod_rewrite只需要" Clean"网址并将其翻译成原始的"脏"一,所以你的原始代码仍然可以使用相同的参数。
答案 1 :(得分:0)
此:
RewriteRule !/index.php?route=(A-Z)/(A-Z)&(*)$ /$2/$3
不是你想要的。您将需要两种类型的规则,即从外部将浏览器重定向到您想要查看的URL的规则,然后是内部重写到您的系统可以理解的URL的规则(“脏”规则)。如下所示:
RewriteEngine On
RewriteBase /store/
RewriteCond %{THE_REQUEST} \ /+store/index\.php\?route=checkout/cart
RewriteRule ^ /store/cart? [L,R]
RewriteCond %{THE_REQUEST} \ /+store/index\.php\?route=common/home
RewriteRule ^ /store/home? [L,R]
RewriteCond %{THE_REQUEST} \ /+store/index\.php\?route=product/product&product_id=([^&\ ]+)
RewriteRule ^ /store/product/%1? [L,R]
RewriteRule ^cart$ index.php?route=checkout/cart [L,QSA]
RewriteRule ^home$ index.php?route=common/home [L,QSA]
RewriteRule ^product/(.+)$ index.php?route=product/product&product_id=$1 [L,QSA]
你不能把它作为匹配的“通配符”,因为你将“X / Y”这样的东西改为“Y”,这意味着当你在内部重写它时,“X”部分会永远丢失。