假目录与.htaccess但在两个条件下不起作用

时间:2013-07-02 14:14:47

标签: .htaccess redirect mod-rewrite

我正在尝试使用mod_rewrite进行重定向。

这就是我的期望:

  1. 如果有类似/tags/exampletag的内容,则会view.php?tag=exampletag
  2. 如果没有,只需致电view.php?name=titlegoeshere
  3. 我尝试了下面的代码,但它只返回其中一条规则。

    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ view.php?name=$1 [L]
    RewriteRule ^tags/(.*)$ view.php?tag=$1 [L]
    #also second one doesn't fires style, js files.
    #I suppose because of looking a directory which is not exist.
    

1 个答案:

答案 0 :(得分:0)

问题是你的第一条规则匹配所有内容,因此每个请求都会被重写为“view.php”。这意味着第二条规则永远不会匹配,永远不会触发。

如果你使第一条规则中的模式更加严格,那么你可以避免它与所有东西相匹配。例如:

RewriteRule ^([^/]+)$ view.php?name=$1 [L]

这只会匹配不包含正斜杠的请求。所以“标题”会匹配,但“标签/标题”不会​​。这将允许请求“标签/标题”滑过第二个规则,这将匹配它。

关于无法找到CSS和JS文件的问题,请参阅my answer to a user who has the same problem。 (简而言之,当您从相对CSS,JS和图像路径重建完整文件路径时,您需要考虑Web浏览器认为页面所在的位置。)