2011-01-24 180 views
1

我要让我的网址从的mod_rewrite删除子文件夹和PHP

root.com/sub/?page=home

TO

root.com/home

我想要去删除子文件夹,删除PHP,只是离开最基本的网址。 另外如果可能,我想将所有非'root.com/ [*]'重定向回root.com。例如,“root.com/home/index.php?page=home”和“root.com/sub/test/”都会重定向回“root.com”。

的.htaccess和mod_rewrite的似乎是最好的办法 到目前为止,我有这样的:

RewriteEngine On 
#remove subfolder, WORKS 
RewriteCond %{HTTP_HOST} ^root\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.root\.com$ 
RewriteCond %{REQUEST_URI} !^/sub/ 
RewriteRule (.*) /sub/$1 [L] 

这个工程并删除子文件夹

#remove PHP, not working :S 
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?page=$1 [L] 
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L] 

但这不是工作,离开“ ?page = home'ect 我想我在第二条规则的正则表达式之前缺少了一些东西,但是我对此很感兴趣。

在此先感谢!

编辑:考虑到[L]的事情,仍然没有骰子。

我猜它需要在一次命中而不是单独迭代中完成。

+0

凹凸/我发现了另一个问题,当我认为从我的电脑该站点时(第一部分)显示为'www.root.com/page',这很好,但是在我的队友电脑上,它显示为'www.root.com/sub/page'wtf。 – Neros 2011-02-08 06:04:49

回答

0

mod_write的问题通常在于冲突;在这种情况下,第二个块将与第一个块追加后缀匹配,产生无限循环或500错误。

您应该每RewriteRule附加国旗[L]。例如。

RewriteEngine On 
#remove subfolder 
RewriteCond %{HTTP_HOST} ^root\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.root\.com$ 
RewriteCond %{REQUEST_URI} !^/sub/ 
RewriteRule (.*) /sub/$1 [L] 

#remove PHP 
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?page=$1 [L] 
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L] 

没有[L]/abc将被改写为/index.php?page=abc,这将改写为/sub//index.php?page=abc

我75%确定这是问题,但它没有经过测试,所以我不打赌。不要伤害尝试。

+0

我给了它一个去,但我仍然得到像“www.root.com/?page=home”这样的网址,所以子文件夹仍然消失,但PHP仍然在 – Neros 2011-01-25 09:15:23

0

此规则的问题,我认为:

RewriteRule (.*) /sub/$1 [L]

尝试将其更改为:

RewriteRule (.*) /sub/index.php?page=$1 [L]

+0

左右给了这个镜头(其他变化)仍然不能得到它的工作:S – Neros 2011-01-27 05:09:23