mod_rewrite-规则组合出现问题



我有以下规则可以使用:

  • 仅对存在的文件执行操作
  • 排除任何在uri中包含images|js|css的文件
  • 向请求uri添加尾部斜杠

重写规则:

RewriteEngine on
DirectorySlash Off
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/(images|js|css)$ 
RewriteRule ^(.*[^/.])$ /$1/ [R=301,L]

我现在需要正确地重定向我的主页uri,如下所示:

http://www.example.com/sitemap/->http://www.example.com/index.php?page=sitemap

我尝试了以下方法:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/.])$ index.php?page=$1 [R=301,L,NC]

但我发现一个页面没有找到,大概是因为1美元被喂了一个带有斜杠的东西。我以为[^/]会删除它,但显然没有。

有人能解释一下我在哪里出错了吗?

使用此规则--它将把/sitemap/重写为/index.php?page=sitemap:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ /index.php?page=$1 [QSA,L]
  1. 将其放入.htaccess的网站根文件夹中。如果放在其他地方,需要稍微调整一下。

  2. URL将保持不变。将保留现有的查询字符串。

  3. 尾部斜线/必须存在(即/sitemap不会触发此规则(。

  4. 只有当没有这样的文件夹或文件时,它才会重写(即,如果您的网站根文件夹中有一个名为sitemap的文件夹,则不会发生重写(。

  5. 它只适用于1文件夹深度URL(例如/sitemap//help//user-account/等(。它不适用于路径中的2个或多个文件夹(例如/account/history/(。


RE:此行:RewriteCond %{REQUEST_URI} !/(images|js|css)$

您说您希望"排除在其uri中包含images|js|css的任何文件">。不幸的是,上面的模式工作方式不同——它将匹配/something/css,但不匹配/css/something/something/file.css

如果您想在URL中的斜杠后面直接匹配images|js|css ANYWHERE,请删除$

最新更新