我想让我的网址来自
root.com/sub/?page=home
TO
root.com/home
我想删除子文件夹,删除php并保留最基本的URL。 如果可能的话,我想将所有非'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'等 我认为我在第二条规则的正则表达式之前遗漏了一些东西,但我是新手。
提前致谢!
编辑:考虑到[L]的事情,仍然没有骰子。我猜它需要在一次点击而不是单独的迭代中完成。
答案 0 :(得分:0)
mod_write
的问题通常在于冲突;在这种情况下,第二个块将匹配第一个块追加后记,创建无限循环或500错误。
您应该将标记[L]
附加到每个RewriteRule
。 E.g。
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%肯定这是问题所在,但它没有经过考验,所以我不会打赌它。从来没有伤过尝试。
答案 1 :(得分:0)
这个规则是我认为的问题:
RewriteRule (.*) /sub/$1 [L]
尝试将其更改为:
RewriteRule (.*) /sub/index.php?page=$1 [L]