这是我的.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]
我有麻烦,无法理解^,请帮忙!我该怎么办?
答案 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]