[英]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.