2012-03-30 121 views
1

我写了一个URL重写规则的URL重定向等作为

http://picselbocs.com/projects/helsinki-map-application/{something} to 
http://picselbocs.com/projects/helsinki-map-application/index3.php?pcode={something}. 

在我检查,如果$_GET['pcode']变量是index3.php文件的头设置,我的目标是,如果变量未设置(即试图访问http://picselbocs.com/projects/helsinki-map-application/时),重定向到以下地址:http://picselbocs.com/projects/helsinki-map-application/D02081460

不幸的是,重定向不会发生。这意味着如果该{something}值是空的,我不重定向到http://picselbocs.com/projects/helsinki-map-application/D02081460

php文件中的代码是:

if (!isset($_GET['pcode'])) { 
    header('Location: ./D02081460');  
    exit(); 
} 

而且.htaccess文件上写着:

RewriteEngine On 
RewriteRule ^([A-Za-z0-9]+)?$ index3.php?pcode=$1 [NC,L] 

任何人都可以告诉我我做错了什么?

在此先感谢!

+0

'(+)'可以(也应该)与''代替?(*)。试试看。 – 2012-03-30 16:20:38

+0

重定向规则是否真的有效?你有没有检查你的Apache日志,看看GET参数实际上是否被传递? – 2012-03-30 16:20:52

+0

该规则按预期工作,除非传递GET变量,是的。 @Truth我已经取代了“+”,但仍然没有伎俩... – 2012-03-30 16:29:51

回答

4

目前,pcode将始终设置,它可能只是空的,因为规则总是会通过,所以你会得到index3.php?pcode = {something},但{something}可能等于''。

因此,要么:

RewriteEngine On 
RewriteRule ^([A-Za-z0-9]+)/?$ index3.php?pcode=$1 [NC,L] 
RewriteRule ^.*     index3.php    [NC,L] 

添加失效切换,使组贪婪,使其如果不经过失败。或者你的支票更改为:

if ($_GET['pcode'] == '') { 
    header('Location: ./D02081460');  
    exit; 
} 

希望这有助于

ISE

+0

谢谢,是!我已经对重写规则进行了更改,并且做到了这一点。谢谢! – 2012-03-30 16:33:10

+0

顺便说一句,我怎么能稍微改变规则,所以URL将以问号开始?例如http://picselbocs.com/projects/helsinki-map-application/?D02081460?我已经尝试了2个小时,但无法使其工作 – 2012-03-30 16:35:46

+0

尝试转义问号,因为它是一个特殊字符,并且在正则表达式中有函数。你的小组可以是:^(\?+ [A-Za-z0-9] +)/?$。那工作? – ise 2012-03-30 16:41:11