带有可选参数的干净URL的mod_rewrite规则

时间:2013-03-31 23:05:27

标签: .htaccess mod-rewrite apache2

我有当前的网址:

http://domain.com

当您访问此网址时,默认情况下会加载:

http://domain.com/index.php

在我的.htaccess中我有:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([^/]*)$ /index.php?var1=$1 [L]
RewriteRule ^([^/]*)/([^/]*)$ /index.php?var1=$1&var2=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /index.php?var1=$1&var2=$2&var3=$3 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /index.php?var1=$1&var2=$2&var3=$3&var4=$4 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /index.php?var1=$1&var2=$2&var3=$3&var4=$4&var5=$5 [L]

.htaccess为所有页面提供404,所以我确定它错了。

我希望能够使用以下所有URL工作

http://domian.com/val1/
http://domian.com/val1/val2/
http://domian.com/val1/val2/val3
http://domian.com/val1/val2/val3/val4/
http://domian.com/val1/val2/val3/val4/val5

表示它们是可选参数

我做错了什么?如何设置.htaccess以接受可选参数。

编辑:我在原始问题中遇到了很多问题,所以我把它变成了一个更容易理解的问题。希望我得到答案。

2 个答案:

答案 0 :(得分:3)

在经过相当多的试验和错误之后我找到了答案:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)$ index.php?word=$1&media=$2&date=$3&sortby=$4&source=$5 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)$ index.php?word=$1&media=$2&date=$3&sortby=$4 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)$ index.php?word=$1&media=$2&date=$3 [L]
RewriteRule ^([\w-]+)/([\w-]+)$ index.php?word=$1&media=$2 [L]
RewriteRule ^([\w-]+)$ index.php?word=$1 [L]

这让我得到了我想要的结果。但是如果最后有一个斜线我得到404 例如:

http://domain.com/val1/

但是给出了404

http://domain.com/val1

按预期工作。怎么样?

编辑:用于尾部斜杠的faa解决方案。最终规则如下:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?var1=$1&var2=$2&var3=$3&var4=$4&var5=$5 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?var1=$1&var2=$2&var3=$3&var4=$4 [L]
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/?$ index.php?var1=$1&var2=$2&var3=$3 [L]
RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?var1=$1&var2=$2 [L]
RewriteRule ^([\w-]+)/?$ index.php?var1=$1 [L]

答案 1 :(得分:1)

一些请求示例中有一个尾部斜杠,规则中的正则表达式不匹配。

你可以试试这个:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteRule ^([^/]+)/?$ /index.php?var1=$1 [L,NC]
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?var1=$1&var2=$2 [L,NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /index.php?var1=$1&var2=$2&var3=$3 [L,NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?var1=$1&var2=$2&var3=$3&var4=$4 [L,NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ /index.php?var1=$1&var2=$2&var3=$3&var4=$4&var5=$5 [L,NC]