Apache RewriteRule没有按预期重写

时间:2013-10-23 21:33:58

标签: .htaccess mod-rewrite

您是否可以看到以下apache重写规则有任何问题:

这是在我的.htaccess文件中,名为“text”的文件夹里面是localhost/lombardpress的子目录我有以下规则

Options +FollowSymlinks
RewriteEngine on
RewriteRule ([^/]+) /textdisplay.php?fs=$1 [NC]

我期待这个输入:

http://localhost/lombardpress-dev/text/lectio1

重写为:

http://localhost/lombardpress-dev/text/textdisplay?fs=lectio1

但我得到404错误。

  

在此服务器上找不到请求的URL /textdisplay.php。

在我看来,RewriteRule重写了地址,但没有按照我的意图 - 所以我的正则表达式一定有问题。

如果我能提供进一步的信息,请告诉我。

3 个答案:

答案 0 :(得分:1)

试试这个

Options +FollowSymlinks
RewriteEngine on
RewriteBase /lombardpress-dev/text/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ([^/]+) textdisplay.php?fs=$1 [NC]

使用重写cond,您不会再将文本display.php重定向到自身。 问题是[^ /] +匹配所有但/它匹配文本display.php

答案 1 :(得分:0)

删除目标网址中的前导斜杠:

试试这段代码:

Options +FollowSymlinks
RewriteEngine on

# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ textdisplay.php?fs=$1 [NC,L,QSA]

参考:Apache mod_rewrite Introduction

答案 2 :(得分:0)

摆脱目标前面的/

RewriteRule ([^/.]+) textdisplay.php?fs=$1 [NC]
# no slash here ----^