使用htaccess和PHP清理URL

时间:2014-05-05 18:15:26

标签: php apache .htaccess url clean-urls

我已经完成了尽职调查,花了几个小时仔细研究搜索和堆叠QA。没有骰子。所以我终于到这里来请求帮助。

  • Apache HTTP Server
  • PHP 5.3

我有脏网址:

.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代码来获得所需的干净网址?我想在浏览器的地址栏中看到干净的网址。

提前致谢。

2 个答案:

答案 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”部分会永远丢失。