2011-12-21 57 views
2

我想创建一系列mod_rewrite规则来制作漂亮的url。.htaccess mod_rewrite challenge

我想就可以提供index.php?section=123&area=345&option=1 as /123/345/option=1

到目前为止好,这个工程:

RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3 

确定这里是我的第一个问题:

  1. 如何强制它,如果工作其中一个变量没有定义,即。如果有人浏览到/section而不是/section/area/。如果它已被关闭,我可以使htaccess自动创建/area/作为默认值吗?

  2. 同样,我如何强制/area/有斜线?如果目前没有斜线,我会得到一个404,因为系统正在寻找但没有找到第三个变量。

回答

1

您正在寻找这样的事情,

RewriteRule ^(.+)/(.+)/(.+)|(.+)/(.+)/?|(.+)/?$ /index.php?section=$1&area=$2&$3 

游马通过分离[OR]标志的子patters。

此模式可能无法使用。您可能需要修改。

+0

谢谢这很好地指出了我的正确方向。为了清晰起见,我最终将不同的规则分开了,但是这基本上是对代码的修改: 'RewriteRule ^(。+)/(。+)/(。+)$ /index.php?section=$1&area = $ 2&$ 3 [L] RewriteRule ^(。+)/(。+)/ $ /index.php?section=$1&area=$2 [L] RewriteRule ^(。+)/(。+)$/index .php?section = $ 1&area = $ 2 [L] RewriteRule ^(。+)/ $ /index.php?section=$1 [L]' 这涉及尾部斜线问题,我将使用PHP来定义如果需要的话,默认区域。 – whizzkid 2011-12-22 01:18:55

0

当您尝试“验证”用户的网址输入时,这可能会变得非常难看。

从长远来看,您可能希望将它们分开以使其更易维护,或者您希望添加更多曲折。

下面是一个例子:

#sunshine case 
RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3 

#if user enter /123/option=1, ie forgot 456 as the area 
RewriteRule ^(.+)/option=(.+)$ /index.php?section=$1&area=default&$2 

我不知道什么是你用斜线问题,不会在URL成为123/456option=1? 反正一些指南可以发现here

我的看法: 如果用户想自己进入,而不是依靠你的网站提供的链接网址,停止重写的URL,并给他们的404,我不会鼓励用户错误