是否有可能写一个RewriteCond来实现这一点

时间:2012-12-06 11:24:51

标签: .htaccess mod-rewrite url-rewriting

我有这个重写cond:

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 /,除了上面的内容。条件,它只是root中的任何现有目录,不需要应用特殊目录的规则。

我的问题是,是否可以编写重写或采用另一种方法来完成相同操作,而不必手动编写在root中创建的.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

然后有一个问题,其中目录中的朋友只在root的所有目录之外应该执行某些操作/朋友去任何东西/ view_friends.php

我想要的是能够编写一个考虑到root中每个现有目录的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

目录必须作为重写的真实目录存在,因为我使用幻像目录进行第一次重写。

1 个答案:

答案 0 :(得分:0)

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

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

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

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