标题说明了我的问题。
我的.htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^series/([0-9a-zA-Z_-]+)/([0-9]+)/([0-9]+) series.php?seriesID=$1&season=$2&episodeID=$3
RewriteRule ^series/([0-9a-zA-Z_-]+)/([0-9]+) series.php?seriesID=$1&season=$2
RewriteRule ^series/([0-9a-zA-Z_-]+) http://my-domain.com/series/$1/1
RewriteRule ^series$ series.php
第一个"重写规则"不起作用。例如,当我调用http://my-domain.com/series/my-series/1/1
时,GET变量episodeID
没有被设置,尽管我认为我正确地定义了它。
看起来您与MultiViews
有冲突。启用多视图后,mod_negotification将为series.php
发出一个内部子请求(将文件扩展名附加到原始请求(,而不需要查询字符串,然后mod_rewrite才能用查询字符串参数重写URL。
尝试禁用.htaccess
文件顶部的多视图:
Options -MultiViews
您还应该删除两个条件:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} -f
它们只适用于后面的第一个RewriteRule
指令。但它们似乎无论如何都不适用于这些规则?
RewriteRule ^series/([0-9a-zA-Z_-]+) http://my-domain.com/series/$1/1
此第三条规则还将触发外部302重定向。看起来这应该是";类似的";到前面的规则。例如:
RewriteRule ^series/([0-9a-zA-Z_-]+) series.php?seriesID=$1&season=1 [L]
AND应该在这些RewriteRule
指令中的每一个上都包含L
标志,以防止处理剩余的指令。