2013-10-22 113 views
1

我想通过(不定向)是这样的:使用htaccess的传递目录GET参数无需重写URL

http://www.example.com/ 传递给脚本 http://www.example.com/index.php

http://www.example.com/foo/(使用/可选)(与/可选) 传递给脚本传递到脚本 http://www.example.com/index.php?nav=foo

http://www.example.com/foo/bar(有/可选) http://www.example.com/index.php?nav=foo&subnav=bar

此外,我想通过子域http://testumgebung.example.comhttp://www.example.com/testumgebung.php与上述相同的参数。

我只是设法做到以下几点,但它重写URL在浏览器栏传递的位置,并没有离开网址为前:

RewriteCond %{HTTP_HOST} ^testumgebung\.maskesuhren\.de 
RewriteRule ^(.*)$ http://www.maskesuhren.de/$1/testumgebung.html [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/[^/]+/?$ 
RewriteRule ^([^/]*)/?$ index.html?nav=$1 [R,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} /.*/.* 
RewriteRule ^([^/]*)/([^/]*)$ index.html?nav=$1&subnav=$2 [R,L] 

回答

2

你想摆脱R的在过去的2个规则:

RewriteCond %{HTTP_HOST} ^testumgebung\.maskesuhren\.de 
RewriteRule ^(.*)$ http://www.maskesuhren.de/$1/testumgebung.html [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/[^/]+/?$ 
RewriteRule ^([^/]*)/?$ index.html?nav=$1 [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} /.*/.* 
RewriteRule ^([^/]*)/([^/]*)$ index.html?nav=$1&subnav=$2 [L] 

在方括号中的R告诉mod_rewrite的将浏览器重定向,从而改变在浏览器的地址栏中的网址。 。

+0

你是对的,但我必须处理不在example.com/foo/bar/js/bla.js但是在example.com/js/bla.js的外部资源。任何解决方案来规避这个问题?我的另一个问题是,子域testumgebung被重定向到http://www.maskesuhren.de/testumgebung.html,但我想保留在testumgebung.maskesuhren.de。 Thx为你的帮助到目前为止。 – velop

1

我不得不改变次序才达到我想要的东西

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/[^/]+/?$ 
RewriteRule ^([^/]*)/?$ ?nav=$1 [R,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} /.*/.* 
RewriteRule ^([^/]*)/([^/]*)$ ?nav=$1&subnav=$2 [R,L] 

RewriteCond %{HTTP_HOST} ^testumgebung\. [NC] 
RewriteRule ^$ testumgebung.html [L] 

,并改写HTML,这样的外部资源开始用斜杠。