有没有可能写一个RewriteCond来以不同的方式实现这一点



我有这个重写条件:

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/myddirectory_b/)重定向到root/specialdirectory/,但条件是根目录中的任何现有目录都不需要应用转到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转到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,因为我在第一次重写时使用了幻影目录。

我并没有完全按照你的意愿行事。如果你能发布整个htaccess而不仅仅是碎片,那会更容易。另外,提供一些示例url也会有所帮助。

但我会告诉你我用了什么。

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

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

相关内容

最新更新