我试图重定向:
index.php
的所有页面(这都有效)。
/products/large/12345.jpg
至/classes/watermark/handler.php?size=large&photo=12345.jpg
(事实并非如此)。
### OPTIONS ###
Options +FollowSymLinks -Indexes -MultiViews
AddDefaultCharset UTF-8
### REWRITE ###
RewriteEngine On
RewriteBase /
### CONDITIONS ###
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
### RULES ###
RewriteRule ^([^?]*)$ /index.php?path=$1 [NC,QSA]
RewriteRule ^/products/(.*)/(.*)$ /classes/watermark/handler.php?size=$1&photo=$2
问题是apache返回内部重定向错误。
答案 0 :(得分:0)
您的指令顺序错误。您需要先具备更具体的规则。就像你说的,你是重写"所有页面都是index.php
"。如果您已写入index.php
,那么您希望如何重写/products/....
?
但是,您的RewriteRule
模式中也有错误。在.htaccess
中,匹配的URL路径不以斜杠开头。所以,无论如何,这永远不会匹配。
另请注意,RewriteCond
指令仅适用于后面的第一个RewriteRule
。 RewriteCond
和RewriteRule
指令一起形成一个"规则"。你不应该将条件和RewriteRule
指令分开,它们可以一起工作(并且可以相互交谈)。
尝试这样的事情:
# Rewrite images
RewriteRule ^products/(.*)/(.*)$ /classes/watermark/handler.php?size=$1&photo=$2 [L]
# Rewrite all other pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?path=$1 [QSA,L]
注意我还添加了L
(last
)标记,以防止处理以下指令。
不确定为什么你的模式有[^?]*
?查询字符串与RewriteRule
模式不匹配。因此,这可以简化为.*
(如上所述)。
根据您的网址结构,您可能还需要确认是否正在请求图片?即。请求以.jpg
结尾的网址?而不是/products/large/<something>
之类的东西。您还可以验证&#34;尺寸&#34;即。 (small|medium|large)
。
问题是apache返回内部重定向错误。
好吧,我无法看到您发布的代码中会发生什么? (如上所述,在您发布的代码中,该附加指令不会做任何事情。)