mod_rewrite一直是我最薄弱的领域之一。我试图找到一段时间的解决方案,许多答案只是链接到mod_rewrite documentation,这对我没有帮助。我相信我的问题很简单,所以我希望有人不介意这次给我一个免费赠品。
我对Drupal有一些现有的mod_rewrite规则:
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
当然,工作正常;他们是库存Drupal规则。
我想重定向
的请求/snippet/yyyy-MMM-dd/name-of-article
到
/snippets/name-of-article
所以我把规则改为:
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^snippet/20[0-9]{2}-[a-z]{3}-[0-9]{2}/(.*)$ snippets/$1 [L,R=301] ### MY NEW RULE RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
我的新规则按预期工作,并正确执行重定向。但是,它似乎会影响CSS和JS请求,这可以通过错误日志中缺少样式和scriptin,g和404错误来证明。如果我尝试直接查看CSS或JS文件,我会得到与我请求父文档相同的HTML输出。所以,显然,我的规则被打破了。
我不知道为什么这么难 - 看起来很简单。
答案 0 :(得分:0)
好吧,我学到了一些东西。 RewriteCond
会影响他们之前的RewriteRule
。杜!
这有效:
RewriteEngine on RewriteBase / RewriteRule ^snippet/20[0-9]{2}-[a-z]{3}-[0-9]{2}/(.*)$ snippets/$1 [L,R=301] ### MY NEW RULE RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]