1

我有当前的网址:

http://domain.com

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

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,所以我确定它是错误的。

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

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 以接受可选参数。

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

4

2 回答 2

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]
于 2013-04-01T04:36:07.753 回答
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]
于 2013-04-01T03:25:24.087 回答