2011-08-26 65 views
0

我想重定向localhost/myScript/之后的链接到localhost/myScript/test.php?var=$1.htaccess问题

所以..像

localhost/myScript/this/is/just/a/test/ 

(有或没有最后的斜线)将重定向到

localhost/myScript/test.php?var=this/is/just/a/test 


这是我得到了什么,但它不够好。

RewriteRule ^(.+)$ test.php?var=$1 

我使用

RewriteRule ^(.+)/?$ test.php?var=$1 

尝试,但我得到$_GET['var'] = 'test.php'

+0

哪个目录是.htaccess文件? – Eric

+0

它位于myScript/ – D1Error

回答

1

我看到两个主要途径:

两个单独的规则来处理URL使用和不使用斜线。它只会改写请求不存在的文件/文件夹,从而防止你有重写循环:

# work with URL that ends with slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/$ test.php?var=$1 [L] 

# work with the rest of URLs (that ends with no slash) 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ test.php?var=$1 [L] 

2.有单独的规则,忽略现有的文件(不重写已经重写的URL),然后使用1行重写规则的URL有和没有斜线:

# do not do anything for already existing files 
RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .+ - [L] 

# rewrite URLs 
RewriteRule ^(.*[^/])/$ test.php?var=$1 [L] 
RewriteRule ^(.+)$ test.php?var=$1 [L] 

我宁愿#2。

+0

这是可行的。非常感谢你! – D1Error

1

这是更好的

RewriteCond %{REQUEST_URI} !\.php$ 
RewriteRule ^(.+?)$ test.php?var=$1 [L] 
+0

我已经编辑了这个以符合我的要求: RewriteRule ^(。+?)$ test.php?var = $ 1 [L] 谢谢! – D1Error

+0

我找到了一个错误。如果我尝试请求一个图像,它会将请求传递给test.php。 – D1Error

+0

@ D1Error你忘记包括我的第一行。第一行确保文件名不包含.php – genesis