URL重写规则在.htaccess的index.php的查询参数 [英] URL RewriteRule in .htaccess for index.php query parameters

查看:285
本文介绍了URL重写规则在.htaccess的index.php的查询参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如网址: -

  • www.domain.com/index.php?bob
  • www.domain.com/index.php?jane
  • www.domain.com/index.php?fred

需要重写,如: -

  • www.domain.com/bob
  • www.domain.com/jane
  • www.domain.com/fred

曾尝试与许多变化,但现在最接近我能得到的是: -

  • www.domain.com/?bob
  • www.domain.com/?jane
  • www.domain.com/?fred

下在.htaccess实现这一点......

 重写规则^(。*)$的index.php?$ 1 [L,QSA]
的RewriteCond%{THE_REQUEST} ^ [AZ] {3,} \ S(。*)/指数\ .PHP [NC]
重写规则^%1 [R = 301,L]
 

请会有人指出我需要修改,​​以bin中的? (问号)的网址是什么?

修改

只注意到,由于应用由 anubhava 给出低于的robots.txt例如答案不能解决的.txt文件,但只显示网页。

的.htaccess如下: -

  RewriteEngine叙述上

的RewriteBase /
的RewriteCond%{THE_REQUEST} \ S / +指数\ .PHP \([^ \ S&安培] +)?[NC]
重写规则^%1? [R = 301,L]

重写规则^ sitemap.xml的$的index.php?路径=进/ google_sitemap [L]
重写规则^ googlebase.xml $的index.php?路径=进/ google_base [L]
重写规则^下载/(.*)/index.php?route=error/not_found [L]
的RewriteCond%{HTTP_HOST}!^ WWW \。
(。*)重写规则^ $ HTTP://www.% {HTTP_HOST} / $ 1 [R = 301,L]
的RewriteCond%{} REQUEST_FILENAME!-f
的RewriteCond%{} REQUEST_FILENAME!-d

#POS1
?重写规则^([^ /] +)/ $的index.php $ 1 [L,QSA]<  - 

的RewriteCond%{REQUEST_URI} * \!。(ICO | GIF | JPG | JPEG | PNG | JS | CSS)
重写规则^([^] *)的index.php?_route _ = $ 1 [L,QSA]

#POS2
 

如果我想补充的< - 在POS1线,robots.txt的URL返回一个404页没有发现错误。

如果我想补充的< - 在POS2线,robots.txt的网址只显示首页

EDIT2

在此期间,我已经排除的robots.txt 从重写通过添加以下根据重写基地/ : -

 重写规则^ robots.txt的 -  [L]
 

解决方案

您可以使用此code:

  RewriteEngine叙述上

的RewriteCond%{THE_REQUEST} \ S / +指数\ .PHP \([^ \ S&安培] +)?[NC]
重写规则^%1? [R = 301,L]

的RewriteCond%{} REQUEST_FILENAME!-f
的RewriteCond%{} REQUEST_FILENAME!-d
重写规则^([^ /] +)/ $的index.php?$ 1 [L,QSA]
 

Example URL's:-

  • www.domain.com/index.php?bob
  • www.domain.com/index.php?jane
  • www.domain.com/index.php?fred

Need rewriting like:-

  • www.domain.com/bob
  • www.domain.com/jane
  • www.domain.com/fred

Have tried with many variations now but the closest I can get to is:-

  • www.domain.com/?bob
  • www.domain.com/?jane
  • www.domain.com/?fred

The below in .htaccess achieves this...

RewriteRule ^(.*)$ index.php?$1 [L,QSA]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index\.php [NC]
RewriteRule ^ %1 [R=301,L]

Please could someone point out what I need to modify to bin the ? (question mark) in the URL?

Edit

Just noticed that since applying the answer given by anubhava below that robots.txt for example doesn't resolve to the .txt file but just displays the homepage.

.htaccess below:-

RewriteEngine On

RewriteBase /
RewriteCond %{THE_REQUEST} \s/+index\.php\?([^\s&]+) [NC]
RewriteRule ^ %1? [R=301,L]

RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L]
RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L]
RewriteRule ^download/(.*) /index.php?route=error/not_found [L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#pos1
RewriteRule ^([^/]+)/?$ index.php?$1 [L,QSA] <--

RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

#pos2

If I add the <-- line in pos1, the robots.txt URL returns a 404 page not found error.

If I add the <-- line in pos2, the robots.txt URL just displays the homepage.

Edit2

In the meantime, I have excluded robots.txt from rewrites by adding the following under Rewrite Base /:-

RewriteRule ^robots.txt - [L]

解决方案

You can use this code:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+index\.php\?([^\s&]+) [NC]
RewriteRule ^ %1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?$1 [L,QSA]

这篇关于URL重写规则在.htaccess的index.php的查询参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆