【问题标题】:Would it be possible to write a RewriteCond to accomplish this differently是否可以编写一个 RewriteCond 以不同的方式完成此操作
【发布时间】:2012-12-06 11:24:51
【问题描述】:

我有这个重写条件:

RewriteCond    %{REQUEST_URI} !.*\.(css|js|php|html|png|jpg|gif)|notes|messages|/delete/|/achors_data/|/composer/|/pagination/|/mom_mp3/|/swf/|/js/|/stories/|/wall/|/news_feed/|/notifications/|opencv|hdflvplayer|hdflvplayer2|videojs|ffmpeg|mediaplayer|uploadify|/v/|/video/|/options/|show_msg_dialogs|facedetector|classes|right_column_modules|functions|maurice|pokes|opticrop|geoip_city|/autocomplete/|chrono|ajax|editprofile|tag|Svetlozar.NET

它必须与在根目录上创建的每个新目录一起维护,因为我有一个重写规则,它将所有内容从不存在的目录(root/mydirectory/ 和 root/mydirectory_b/)重定向到 root/specialdirectory/ 上的内容除外条件是根目录中的任何现有目录,不需要应用转到特殊目录的规则。

我的问题是是否可以编写 rewritecond 或采取其他方法来完成相同的任务,而不必手动编写在根目录中创建的 .htaccess 中的每个新目录。

所以这是带有 cond 的重写规则,它使所有内容(root/anydir/)都转到 根/主

RewriteCond    %{REQUEST_URI} !.*\.(css|js|php|html|png|jpg|gif)|notes|messages|/delete/|/search/|/buttons/|/achors_data/|/composer/|/pagination/|/mom_mp3/|/swf/|/js/|/stories/|/wall/|/news_feed/|/notifications/|opencv|hdflvplayer|hdflvplayer2|videojs|ffmpeg|mediaplayer|uploadify|/v/|/video/|/options/|show_msg_dialogs|facedetector|classes|right_column_modules|functions|maurice|pokes|opticrop|lists|geoip_city|/autocomplete/|chrono|ajax|editprofile|tag|Svetlozar.NET
RewriteRule   ^([A-Za-z-0-9-_.]+)?$ master/$2

然后有一个问题,只有在根目录之外的目录friends应该执行某个操作anything/friends go to anything/view_friends.php

我想要的是能够编写一个考虑到根目录中每个现有目录的 RewriteCond - 一个通配符。

所以我最终会在没有维护的情况下编写如下内容

RewriteCond    %{REQUEST_URI} ! * existing directories - except just one

代替:

RewriteCond    %{REQUEST_URI} !.*\.(css|js|php|html|png|jpg|gif)|pokes|opticrop|notes|/delete/|/search/|/buttons/|/achors_data/|/composer/|/pagination/|/mom_mp3/|/swf/|/js/|/stories/|/wall/|/news_feed/|/notifications/|opencv|hdflvplayer|hdflvplayer2|videojs|ffmpeg|mediaplayer|uploadify|/v/|/video/|/options/|show_msg_dialogs|facedetector|classes|right_column_modules|functions|maurice|lists|geoip_city|/autocomplete/|chrono|ajax|editprofile|tag|Svetlozar.NET
RewriteRule ^([A-Za-z-0-9-_.]+)/friends $1/view_friends.php

目录必须作为 rewritecond 应用的真实目录存在,因为我将幻影目录用于第一个 rewriterule。

【问题讨论】:

  • 你能显示其他现有的重定向规则吗?

标签: .htaccess mod-rewrite url-rewriting


【解决方案1】:

我没有完全按照您的要求进行操作。如果您可以发布整个 htaccess 而不仅仅是片段会更容易。还提供一些示例网址会有所帮助。

但我会告诉你我用的是什么。

RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule ^([^/]+)(/(.*))?$ - [L]

此规则获取 url 的第一个过去,在第一个 / 之前,并检查是否存在具有该名称的现有目录(在根目录中)。如果是这样,它将停止处理它下面的任何重写规则(这就是 - [L] 部分所做的)。

【讨论】:

  • 谢谢,正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多