0

我有这个重写条件:

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

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

所以这是使用条件的重写规则,它使所有内容(root/anydir/)都转到 root/master

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 去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。

4

1 回答 1

0

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

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

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

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

于 2012-12-07T16:19:03.953 回答