带有问号htaccess的RewriteRule

时间:2015-06-25 12:25:46

标签: apache .htaccess mod-rewrite

我知道这被问了很多 但我仍然没有成功做到这一点

我在我的htaccess中有这个

RewriteRule    ^embed/([0-9A-Za-z]{12})$        /cgi-bin/index_dl.cgi?op=video_embed&file_code=$1 [L]

RewriteRule    ^embed/([0-9A-Za-z]{12})/(\d+)x(\d+)$        /cgi-bin/index_dl.cgi?op=video_embed2&file_code=$1&w=$2&h=$3 [L]

我希望它是

RewriteRule    ^embed/?v=([0-9A-Za-z]{12})$     /cgi-bin/index_dl.cgi?op=video_embed&file_code=$1 [L]

RewriteRule    ^embed/?v=([0-9A-Za-z]{12})/(\d+)x(\d+)$     /cgi-bin/index_dl.cgi?op=video_embed2&file_code=$1&w=$2&h=$3 [L]

添加?v =

RewriteCond %{QUERY_STRING}  ^v=(.*)$ [NC]
RewriteRule ^embed/%1([0-9A-Za-z]{12})/(\d+)x(\d+)$ /cgi-bin/index_dl.cgi?op=video_embed2&file_code=$1&w=$2&h=$3 [NC,L]
RewriteRule    ^embed/%1([0-9A-Za-z]{12})$      /cgi-bin/index_dl.cgi?op=video_embed&file_code=$1 [NC,L]

不工作

示例 mysite.com/embed/?v=abcde mysite.com/embed/?v=abcde/6x6

目前是 mysite.com/embed/abcde mysite.com/embed/abcde/6x6

所以现在这项工作

RewriteCond %{QUERY_STRING} ^v=(.*)$ [NC]
RewriteRule ^embed/?$       /cgi-bin/index_dl.cgi?op=video_embed2&file_code=%1 [L]

我注意到我在文件中有这个

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_CGI_AUTHORIZATION:%1]
RewriteCond %{QUERY_STRING}     ^v=(.*)$    [NC]
RewriteRule ^$       /cgi-bin/index_dl.cgi?op=download1&id=%1      [NC,L]

我仍在努力使其发挥作用

RewriteCond %{QUERY_STRING} ^v=(.*)/(\d+)x(\d+)$ [NC]
RewriteRule ^embed/?$       /cgi-bin/index_dl.cgi?op=video_embed2&file_code=%1&w=$2&h=$3 [L]

1 个答案:

答案 0 :(得分:0)

您没有正确使用这些规则 - 将%1传递给规则不会帮助您,因为您没有正确匹配。 REQUEST_URIQUERY_STRING是两回事。 RewriteRule只能检查REQUEST_URI,而不是QUERY_STRING,如巴拿马杰克建议的答案所示。

要实现您的目标,您需要使用以下内容:

RewriteEngine On

# Check for mysite.com/embed/?v=abcde/6x6
RewriteCond %{QUERY_STRING} ^v=([^&/]+)\/(\d+)x(\d+)$ [NC]
RewriteRule ^embed/?$       /cgi-bin/index_dl.cgi?op=video_embed2&file_code=%1&w=%2&h=%3 [L]

# Check for mysite.com/embed/?v=abcde
RewriteCond %{QUERY_STRING} ^v=([^&]+)$ [NC]
RewriteRule ^embed/?$       /cgi-bin/index_dl.cgi?op=video_embed&file_code=%1 [L]

在这里,我们只需检查每个案例的查询字符串。如果匹配,只有在/embed/时才重写(尾部斜杠可选 - 如果您希望使用尾部斜杠,可以删除问号。)