mod_rewrite:具有多个参数的表单URL到较短的参数(没有中间部分)

时间:2014-12-11 23:00:57

标签: php apache .htaccess mod-rewrite

现在我使用这些类型的网址:

http://subdomain.example.com/index.php?page=contact
http://subdomain.example.com/index.php?page=about
http://subdomain.example.com/index.php?page=category&category_id=1
http://subdomain.example.com/index.php?page=item&item_id=1

我希望他们看起来像这样:

http://subdomain.example.com/contact/
http://subdomain.example.com/about/
http://subdomain.example.com/category-1/
http://subdomain.example.com/item-1/

所以,我将我的页面/ php文件容纳在以下内容中:

category_id -> category_name
item_id     -> item_name

我的.htaccess文件:

RewriteEngine on
RewriteRule ^([^/]*)/$ /index.php?page=$1 [L]
RewriteRule ^([^/]*)/([^/]*)/$ /index.php?page=$1&category_name=$2 [L]

这给了我一些不错的网址,但我希望它们没有中间部分。换句话说,我想摆脱“类别”和“项目”。例如。

http://subdomain.example.com/category/category-1/ -> http://subdomain.example.com/category-1/

当我尝试将我的.htaccess更改为以下内容时,我可以使用此功能。但你可以看到我必须在第二行发表评论,所以我的联系页面不再有用了:(

RewriteEngine on
#RewriteRule ^([^/]*)/$ /index.php?page=$1 [L]
RewriteRule ^([^/]*)/$ /index.php?page=category&category_name=$1 [L]

我知道它与参数有关,一对二,但我无法弄清楚我必须遵循哪种方式才能让我适应。

如果有人可以帮助我解决这个问题,我真的很乐意!

1 个答案:

答案 0 :(得分:0)

如果我理解......

RewriteEngine on

# Not for real file or directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

# for category-1/ and all like xxxxx-xxx-nnn
RewriteRule ^([^/]+-\d+)/?$ /index.php?page=category&category_name=$1 [L]

# for contact/ or about/ or other/
RewriteRule ^([^/]+)/$ /index.php?page=$1 [L]

结果:

 http://subdomain.example.com/lord-of-the-rings-1/
   ->  http://subdomain.example.com/index.php?page=category&category_name=lord-of-the-rings-1