我是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>
答案 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,因为所有网址都已被重定向到该文件夹。