隐藏友好网址中的目录

时间:2012-10-19 00:11:36

标签: mod-rewrite

如何使用以下规则删除两个目录?

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^/subdir/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /subdir/jadehttp.dll?Www_MySite&Action01=$1&H04=$2&cats=$3&states=$4 [L,NC]

目前,友好网址已成功输出至http://mysite.com/subdir/landingpage/1/packages/vic。 我希望它看起来像:http://mysite.com/subdir/packages/vic 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您有现有的规则,这很好:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^/subdir/([^/]*)/([^/]*)/([^/]*)/([^/]*)$ /subdir/jadehttp.dll?Www_MySite&Action01=$1&H04=$2&cats=$3&states=$4 [L,NC]

然后在之后添加这些以说明URL中缺少两个路径节点:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^/subdir/([^/]*)/([^/]*)$ /subdir/jadehttp.dll?Www_MySite&cats=$1&states=$2 [L,NC]

该规则将采用http://mysite.com/subdir/packages/vic之类的网址请求,并在内部将其重写为/subdir/jadehttp.dll?Www_MySite&cats=packages&states=vic Action01 H04 参数因此丢失。

  

你能否告诉我,如果必须获取Action01和H04的参数但是从新传递的url隐藏它会是什么样子?

您可以嵌入一些默认值,例如:

RewriteRule ^/subdir/([^/]*)/([^/]*)$ /subdir/jadehttp.dll?Www_MySite&Action01=FOO&H04=BAR&cats=$1&states=$2 [L,NC]

使用某些默认值替换FOOBAR。但是由于URI中没有其他内容可以从中提取,因此无法从URI中获取这些参数。如果它们不是URI的一部分,则没有其他内容可以从中提取它们。