-1

我需要这样index.php?page=home的东西/home

index.php?page=products&cat=chairs成为/products/chairs

实现此目的的 mod_rewrite 规则是什么?

已编辑

除了主页,我还有其他页面,所以我的 .htaccess 文件的全部内容现在是

RewriteEngine On
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L]
RewriteRule   ^/products(:/([^/]+))?   /index.php?page=products&cat=$1 [L]

但是当我导航到/products/chairs我得到一个“找不到对象”错误。

4

2 回答 2

1
RewriteEngine on
RewriteRule   ^/home/?$                /index.php?page=home [L]
RewriteRule   ^/products(:/([^/]+))?   /index.php?page=products&cat=$1 [L]

它重写了/homeand /home/,两者/productsand /products/(您没有指定您的预期行为);请注意,cat在这些情况下您将获得一个空参数。

编辑:这是一个经过测试的 .htaccess,留下 R=301 以查看重写结果,.htaccess 和 index.php 在同一目录中(在我的情况下为 webroot):

RewriteEngine on
RewriteRule ^([^/\.]+)/?$          index.php?page=$1 [R=301,L]
RewriteRule ^products/([^/]+)?/?   index.php?page=products&cat=$1 [R=301,L]
于 2012-05-27T02:58:22.993 回答
0

通过启用 mod_rewrite 和 .htaccess httpd.conf,然后将此代码放在您.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?page=(products)&cat=([^\s]+) [NC]
RewriteRule ^ %1/%2 [R=302,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php\?page=(home)\s [NC]
RewriteRule ^ %1 [R=302,L]

RewriteRule   ^(products)/([^/]+)/?$ index.php?page=(products)&cat=$1 [L,QSA,NC]

RewriteRule   ^(home)/?$ index.php?page=$1 [L,QSA,NC]

在您确认它对您正常工作后更改R=302为。R=301

于 2012-05-27T04:04:06.083 回答