mod重写不设置查询字符串变量



标题说明了我的问题。

我的.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标志,以防止处理剩余的指令。

最新更新