HTACCESS:具有多个变量的动态重写URL

时间:2016-02-07 21:22:07

标签: php .htaccess mod-rewrite

我已经为此工作了几天了,我想知道是否有人能指出我正确的方向,请...我试图在我的身上传递两个变量重写。

除非给定的网址是文件或目录,否则我希望动态重写所有网址,如下所示:

  

example.com/category - > example.com/index.php?p=category
  example.com/category/page - >   example.com/index.php?p=category&article=page
  example.com/category2/page - >   example.com/index.php?p=category2&article=page

我很难尝试将以下内容变为动态:
RewriteRule ^category/(.+?)$ ?p=category&article=$1 [L]

我试过这个但它不起作用:
RewriteRule ^(.+?)/(.+?)$ ?p=$1&article=$2 [L]

...也试着这个,但它也不起作用:
RewriteRule ^(.*)/(.+?)$ ?p=$1&article=$2 [L]

我试图避免使用以下内容使其正常工作:
RewriteRule ^category2/(.+?)$ ?p=category2&article=$1 [L]

以下是完整代码:

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^category/(.+?)$ ?p=category&article=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ?p=$1 [L]

更新

这实际上是为我做的:

RewriteRule ^([^/]+)(/([^/]+))? ?p=$1&article=$2 [L]

谢谢!! 安德鲁

1 个答案:

答案 0 :(得分:2)

我不是专家,但我认为这会为你做到:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+)/([^/]+) index.php?p=$1&article=$2         [L]

[^/]+匹配 / 以外的所有内容,在htaccess.madewithlove.be

上进行测试时得出结果

enter image description here

编辑:

因为我完全忘记了第二个参数是可选的,OP中的重大更新几乎完成了它,除了它在parameter2值的开头添加 / 这一事实,因为 $2 正在捕获外部组,而我们需要内部组,如下图所示:

enter image description here

相反 $2 替换为 $3 ,这应该解决它:

RewriteRule ^([^/]+)(/([^/]+))? ?p=$1&article=$3   [L]

enter image description here