mod_rewrite重定向除/ wiki之外的所有URL

时间:2009-09-07 22:58:02

标签: mod-rewrite drupal mediawiki

我是mod_rewrite的新手并且到目前为止刚刚进行了试验和错误,我想将所有URL请求重定向到/drupal-6.13/并隐藏/drupal-6.13/,但是如果URL是www.site.com/wiki不要改写任何东西。我也在drupal中使用pathauto mod来创建故事内容的/ content / title链接。我认为这是顶部和底部htaccess中重写网址的最后一部分,因为www.iamthelaw.net/wiki被重写为http://www.iamthelaw.net/wiki/?q=wiki,但如果我尝试删除它们,则管理链接和内容链接不再有效。有没有什么我可以添加而不取出目前只有/ wiki / requests的覆盖?

这是顶级的htacess:

Options -Indexes
RewriteEngine on
Options +FollowSymLinks

#site
RewriteCond %{HTTP_HOST} ^www\.iamthelaw\.net$ [NC]
RewriteCond %{REQUEST_URI} !^/drupal-6.13
RewriteRule ^$ /drupal-6.13/index.php [L]


#files
RewriteCond %{HTTP_HOST} ^www\.iamthelaw\.net$ [NC]
RewriteCond %{REQUEST_URI} ^.*\.(jpg|jpeg|gif|png|css|js|pl|txt)$
RewriteCond %{REQUEST_URI} !^/drupal-6.13/
RewriteRule ^(.*)$ /drupal-6.13/$1 [L,QSA]

#url 's
RewriteCond %{HTTP_HOST} ^www\.iamthelaw\.net$ [NC]
RewriteCond %{REQUEST_URI} !^/drupal-6.13
RewriteRule ^(.*)$ /drupal-6.13/index.php?q=$1 [L,QSA]

并在子文件夹中的htacess的重写部分/drupal-6.13 /:

# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on

RewriteBase /drupal-6.13


# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ /drupal-6.13/index.php?q=$1 [L,QSA]
</IfModule>

4 个答案:

答案 0 :(得分:0)

将/ wiki的重写规则放在文件的前面,并确保它有一个L作为修饰符的一部分(很可能是[L,QSA]),因此它是 L ast规则处理匹配的URL,因此后面的重写不会影响它。

答案 1 :(得分:0)

正如我想戴维所说的那样,你首先使用/wiki[L]制定规则,因此/wiki会忽略更多规则。其次是你的其他后缀

的规则
RewriteRule ^wiki /wiki  [L]
RewriteRule ^.* /notwiki

我希望你能适应你的情况

答案 2 :(得分:0)

我认为你只需要两条规则:

RewriteCond %{THE_REQUEST} ^GET\ /drupal-6\.13
RewriteRule ^drupal-6\.13($|/.*) 
RewriteRule !^wiki($|/) drupal-6.13/index.php [L]

从这些请求中移除/drupal-6.13,该网址路径以/drupal-6.13/开头,并在/wiki/内部重写任何请求,即网址路径不以/drupal-6.13/index.php开头

答案 3 :(得分:0)

我在本地试过这个,但似乎有效。这是你的root .htaccess文件:


RewriteEngine on

# Leave the wiki calls alone
RewriteCond %{REQUEST_URI} ^wiki.*$
RewriteRule ^.*$ - [L]

# redirect everything else to the drupal directory. 
# the drupal .htaccess takes care of drupal-specific rewrites 
RewriteRule ^(.*)$ drupal-6.13/$1 [L]

并且..我认为您不需要在drupal .htaccess文件中使用RewriteBase,因为所有网址都已被重定向到该文件夹​​。