0

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

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]

有了这条规则,我总是得到这个 URL

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

我究竟做错了什么?

4

5 回答 5

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]
 

类似于您之前的情况。
除非您有其他模式,否则应该可以实现您所需要的

希望它有所帮助。

于 2012-11-18T22:44:14.927 回答
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]
于 2012-11-18T20:29:02.893 回答
0

您最初的规则非常有效。唯一的问题是 [R] 修饰符将/folder/something重定向到 /folder/index.php?page=something 并导致第二个请求。

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

要解决此问题,请将 [R] (HTTP 302 Redirect) 替换为 [L] (在此处匹配时离开匹配链),您就完成了

于 2012-11-18T23:40:09.963 回答
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]
于 2012-11-19T11:02:26.940 回答
-1

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

这给了你:

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

我已经编辑了上面的内容,这是本地测试域上的一个工作示例。也许这正是您一直在寻找的。

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

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

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

于 2012-11-18T20:30:11.303 回答