我试图把这个URL改写如下:
fr.example.com/tag/movies example.com/catch.php?tag=movies fr.example.com » domain.com/catch.php?country=fr 对于这些,我有一个.htaccess文件中的以下mod_rewrite规则
子域名+标签
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com [NC] RewriteRule ^tag/([^/]+) catch.php?country=%1&tag=$1 [L,NS]
标签
RewriteRule ^tag/([^/]+) catch.php?tag=$1 [L,NS]
子域
RewriteCond %{HTTP_HOST} ^([^\.]+)\.example\.com [NC] RewriteRule ^(.*)$ catch.php?country=%1 [L,NS]
按照这个顺序。
现在,第一个RewriteRule之后的L应该结束处理,并将其redirect到子域名+标签URL,但是不会。 例如, fr.example.com/tag/movies发送到catch.php?country=fr ,这是.htaccess文件中的最后一个条件。
发现第一个L后不应该停止吗?
回答
那么,事实certificate, [L]标志根据上下文( .htaccess / <Directory>不同于httpd.conf )的不同而有所不同,正如您在这里所看到的。
因此,为了使其工作,只需将规则放置在<VirtualHost> (NOT <Directory> )中,并将/添加到每个URI( /catch.php /tag ,…)。 而已。
L标志在任何情况下都不会停止处理。 我build议检查堆栈溢出这个线程,特别是链接到Apache重写指南,并打开RewriteLog,以便您可以确认如何mod_rewrite处理您的规则。