1

我正在尝试使用mod_rewrite.

这是我的期望:

  1. 如果有类似的东西/tags/exampletag,它会做view.php?tag=exampletag
  2. 如果什么都没有,就打电话view.php?name=titlegoeshere

我尝试了下面的代码,但它只返回其中一个以上规则。

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.
4

1 回答 1

0

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

如果您使第一条规则中的模式更加严格,那么您可以避免它匹配所有内容。例如:

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

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

关于找不到 CSS 和 JS 文件的问题,请参阅我对有相同问题的用户的回答。(简而言之,当 Web 浏览器从相对 CSS、JS 和图像路径重建完整文件路径时,您需要考虑 Web 浏览器认为页面基于何处。)

于 2013-07-02T14:40:12.067 回答