网址重写 - 始终重定向到index.php

时间:2012-11-18 20:24:23

标签: php apache mod-rewrite

我正在尝试重写一些简单的网址:

http://www.site.com/folder/index.php?page=something

http://www.site.com/folder/something

这是我的.htaccess文件(放在/ folder /中)

RewriteEngine On
RewriteBase /folder
RewriteRule ^(.*)$ index.php?page=$1 [R]

使用此规则我总是会得到此网址

    http://www.site.com/folder/index.php?page=index.php

我做错了什么?

5 个答案:

答案 0 :(得分:2)

首先,改变

 
RewriteBase /folder
 


RewriteBase /folder/ 

其次,改变

 
 RewriteRule ^(.*)$ index.php?page=$1 [R]
 

 
  RewriteRule ^index\.php/(.*)$ index.php?page=$1 [L,QSA]
 

那应该有用。 QSA 部分是允许地址中的任何查询字符串转移到新地址;否则,他们将被丢弃。

修改

在这种情况下,试试这个

 
  RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
 

类似于你之前的情况。
除非你有其他模式,否则应该达到你需要的目的 希望它有所帮助。

答案 1 :(得分:1)

您正在引用错误的匹配,请使用$2,如此

RewriteEngine On

RewriteBase /folder

RewriteRule ^(.*)$ index.php?page=$2 [R]

上述情况实际上是错误的。似乎.与正确的字符不匹配(我不知道为什么)。

在不知道问题原因的情况下,我能看到最好的方法是简单地匹配字母和数字,如下所示:

# Turn on the rewrite engine
RewriteEngine On

# Set the rewrites for /folder
RewriteBase /folder

# Set the rewrite rules
RewriteRule ^([a-z0-9]+)/?$ index.php?page=$1 [NC]

答案 2 :(得分:0)

您的初始规则运作良好。唯一的问题是[R]修饰符重定向 /文件夹/某些东西到/folder/index.php?page=something并导致第二次请求。

在/folder/index.php?page=something上应用你的规则,你得到/folder/index.php?page=index.php

要修复此替换[R](HTTP 302重定向)[L](在此处匹配时保留匹配链)并且您已完成

答案 3 :(得分:0)

感谢大家,我成功地做了我想做的事情:

RewriteEngine On
RewriteBase /folder/

#Excluding direct url to php files
RewriteCond %{REQUEST_URI} !(.*)\.php$
#Excluding the empty space url
RewriteCond %{REQUEST_URI} !^(\s*)$
RewriteCond %{REQUEST_URI} !\.(gif|jpg|png|css|js|)$ [NC]
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

答案 4 :(得分:-1)

如果我建议,请查看htaccess的生成器,例如:http://www.generateit.net/mod-rewrite/

给你:

RewriteEngine On
RewriteRule ^folder/([^/]*)$ /folder/index.php?page=$1 [L]

我编写了上述内容,这是本地testdomain上的一个工作示例。 也许这就是你一直在寻找的东西。

另外,如果可以的话,不建议省略页面的扩展名。谷歌喜欢它是可识别的,例如.html或.php。

并且,您应该为添加的每个参数添加一个重写。

最后,我会省略index.php。如果没有找到其他页面,您的服务器将自动加载index.php,但它不必在地址栏中可见。