PHP mod重写无法正常工作

时间:2012-02-02 13:15:47

标签: mod-rewrite

这是我的.htaccess

Options +FollowSymLinks

RewriteEngine on
RewriteCond %{REQUEST_URI} \/([0-9a-zA-Z]+)$ [NC]
RewriteRule ^(.*) image.php?names[]=%1 [L]

RewriteCond %{REQUEST_URI} \/([0-9a-zA-Z]+),([0-9a-zA-Z]+)$ [NC]
RewriteRule ^(.*) image.php?names[]=%1&names[]=%2 [L]

RewriteCond %{REQUEST_URI} \/([0-9a-zA-Z]+),([0-9a-zA-Z]+),([0-9a-zA-Z]+)$ [NC]
RewriteRule ^(.*) image.php?names[]=%1&names[]=%2&names[]=%3 [L]

RewriteCond %{REQUEST_URI} \/gallery/([0-9a-zA-Z]+)$ [NC]
RewriteRule ^(.*) gallery.php?id[]=%1 [L]

这2个字符串无法正常工作

RewriteCond %{REQUEST_URI} \/gallery/([0-9a-zA-Z]+)$ [NC]
RewriteRule ^(.*) gallery.php?id[]=%1 [L]

当我去gallery / hgJ56时,我看到前2个字符串的内容

RewriteCond %{REQUEST_URI} \/([0-9a-zA-Z]+)$ [NC]
RewriteRule ^(.*) image.php?names[]=%1 [L]
我有麻烦,无法理解^,请帮忙!我该怎么办?

2 个答案:

答案 0 :(得分:0)

这是你的rewriterules的“清洁”版本。

RewriteRule ^/([0-9a-zA-Z]+)$ image.php?names[]=$1 [QSA,NC,L]
RewriteRule ^/([0-9a-zA-Z]+),([0-9a-zA-Z]+)$ image.php?names[]=$1&names[]=$2 [QSA,NC,L]
RewriteRule ^/([0-9a-zA-Z]+),([0-9a-zA-Z]+),([0-9a-zA-Z]+)$ image.php?names[]=$1&names[]=$2&names[]=$3 [QSA,NC,L]
RewriteRule ^/gallery/([0-9a-zA-Z]+)$ gallery.php?id[]=$1 [QSA,NC,L]

告诉我他们是否有效。

如果这还不够:

两个提示:

如果您在托管环境中(=如果它是您自己的服务器可以修改虚拟主机,不仅仅是.htaccess文件),尝试使用RewriteLog指令:它可以帮助您找出这些问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)

答案 1 :(得分:0)

此规则

  

RewriteCond%{REQUEST_URI} /([0-9a-zA-Z] +)$ [NC]

将匹配以/后跟字母数字字符串结尾的字符串,因此它将与gallery/hgJ56匹配,因为它以/hgJF6结尾。

如果规则只应匹配以/后跟字母数字字符串开头的字符串,则可以将此规则更改为

RewriteCond %{REQUEST_URI} ^/([0-9a-zA-Z]+)$ [NC]

它将不再与gallery/hgJ56匹配,您的其他规则也会有效。

请注意,您无需转义/字符,即\/,只有/等效。

您可能还希望将^应用于其他规则,以防它们也应该匹配字符串的开头,即更改

RewriteCond %{REQUEST_URI} \/gallery/([0-9a-zA-Z]+)$ [NC]

RewriteCond %{REQUEST_URI} ^/gallery/([0-9a-zA-Z]+)$ [NC]