用一个或多个参数重写URL?

时间:2013-12-09 12:26:34

标签: regex .htaccess mod-rewrite

我正在努力使用我的.htaccess文件来实现这个目标:

a.com/male-items  (OR)     
a.com/male-items/popularity   ->    a.com/index.php?g=m&sort-popularity 

a.com/female-items  (OR)     
a.com/female-items/popularity ->    a.com/index.php?g=f&sort=popularity 

a.com/male-items/alphabet     ->    a.com/index.php?g=m&sort=alphabet
a.com/male-items/alphabet/a   ->    a.com/index.php?g=m&sort=alphabet&l=a    
(and same for female)

我知道它应该像

RewriteRule ^a$ a.com/index.php?q=$1

但实际上,查看不同的mod-rewrite / regex解释和备忘单并没有帮助它让它发挥作用。困难的部分是了解如何在地址中定义不同的参数,然后在重写的URL中使用它们。

(对您的解决方案的任何解释都会被提及)

2 个答案:

答案 0 :(得分:1)

DOCUMENT_ROOT/.htaccess文件中使用这些规则:

RewriteEngine On

RewriteRule ^male-items/?$                   /index.php?g=m&sort=popularity [L,QSA]
RewriteRule ^male-items/([^/]+)/?$           /index.php?g=m&sort=$2 [L,QSA]
RewriteRule ^male-items/([^/]+)/([^/]+)/?$   /index.php?g=m&sort=$2&l=$3 [L,QSA]

RewriteRule ^female-items/?$                 /index.php?g=f&sort=popularity [L,QSA]
RewriteRule ^female-items/([^/]+)/?$         /index.php?g=f&sort=$2 [L,QSA]
RewriteRule ^female-items/([^/]+)/([^/]+)/?$ /index.php?g=f&sort=$2&l=$3 [L,QSA]

答案 1 :(得分:0)

这些htaccess行将所有不存在的文件/文件夹重定向到index.php:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

在index.php中,您可以使用:$_SERVER['REQUEST_URI']来解析参数。