繁体   English   中英

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

[英]Url Rewriting - Always redirecting to index.php

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

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

我究竟做错了什么?

首先,改变


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]
 

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

希望能帮助到你。

您正在引用错误的匹配,请使用$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]

你的初步规则运作得很好。 唯一的问题是[R]修饰符 /folder/index.php?page=something 重定向 /文件夹/某些内容并导致第二个请求。

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

要解决此问题,请将[R](HTTP 302重定向)替换为[L](当您在此处匹配时保留匹配链)并且您已完成

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

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]

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

这给你:

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM