0

我环顾四周,但找不到任何能真正解释的东西。我以前使用过 htaccess 重写没有太多问题,但我似乎找不到这个失败的地方。我认为这与初始(原始)URL 有关,但我似乎找不到有效的组合。

HTML:

<link rel="stylesheet" type="text/css" href="http://localhost/site/vnd/style/main.css?p=desktop">

.ht 访问:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^style/([A-Z]+\.css)\?p=(.*)$ style/$2/$1 [R=301,L]

预期的重定向(文件实际所在的位置):

style/desktop/main.css

在正则表达式测试器中,它拆分并重新创建它就好了,但我看不到 Apache 看到的内容,因此很难调试。我尝试过绝对路径和相对路径、尾随和无尾随斜杠等的组合。

在控制台中,正在输出 404,告诉我重定向根本不起作用,并且仍在寻找原始 URL。标题:

Request URL: http://localhost/Patterns/mvc/style/main.css?p=desktop
Request Method: GET
Status Code: 404 Not Found
4

1 回答 1

1

RewriteRules 无法提取查询字符串。您需要使用条件来捕获它,并相应地传递它:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{QUERY_STRING} ^p=(.*)
RewriteRule ^style/([a-z]+)\.css$ style/%1/$1.css [R=301,L,NC]

请注意,我已将p键移至QUERY_STRING条件,并且已将NC标志添加到规则中(这意味着它将忽略字符串的大小写)。

于 2013-04-01T08:19:29.647 回答