用第一个和/或第二个子目录重写规则

时间:2013-08-16 17:58:54

标签: .htaccess mod-rewrite

我希望这些网址有效......

example.com /

example.com/results /

example.com/results/live /

example.com/results/live/123

example.com/results/ended /

直播,结束等将永远是字母

123将始终为数字(页码值)

我想要做的是将一个php文件放入/ results /并将“live”和“123”作为两个变量传递。我可以让它工作,但如果我省略“/ 123”,那么我也希望“/ live”继续工作。问题是该目录不存在,并且不包含两个变量,因此被拒绝。我尝试过链接,但无法让它工作。

简化的htaccess文件如下所示

<IfModule mod_rewrite.c>
RewriteEngine OnRewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^results/([A-Za-z]+)/([0-9]+)/?$ /results/index.php?format=$1&pagenum=$2 [L]
</IfModule>
Options All -Indexes
ErrorDocument 404 /errors/404

我已经涉足使用“ - ”而不是目录定界符,同样的问题

本质上我很满意当前正在处理任何丢失的文件或文件夹但我想为这个目录创建一个例外

如果我无法解决这个问题,另一个冗长的选择是使用自己的php文件在“/ results /”中创建实际的子目录,并将分页作为一个变量进行管理。

任何指针?

1 个答案:

答案 0 :(得分:0)

请改为尝试:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^results/([A-Za-z]+)/?(?:([0-9]+)/?|)$ /results/index.php?format=$1&pagenum=$2 [L]

(?:([0-9]+)/?|)是有条件的预测。它使最后一部分(例如/1234)可选。如果不存在,pagenum将为空白。