我目前有以下.htaccess。
<IfModule mod_suphp.c>
suPHP_ConfigPath /home/abc/php.ini
</IfModule>
RewriteEngine on
RewriteCond $1 !^(index\.php|media|css|js|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
AuthType Basic
AuthName "Está dominado!!"
AuthUserFile "/home/abc/.htpasswds/public_html/passwd"
require valid-user
现在问题是,如果在/删除该查询字符串后找到任何查询字符串,我想这样做。
所以: 如果我们有:
http://www.abc.com/ ?somethinghere234
它应该重定向到:
http://www.abc.com/
如果我们有:
HTPP://www.abc.com/something/ ID212
重定向到:
HTPP://www.abc.com/something/
更新: 我试过这个:
尝试A)
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule .* /index.php/ [L,QSA]
跳跃^(。*)$将允许查询字符串上的任何内容......
我也试过这个:
尝试B)
RewriteCond $ 1上的RewriteEngine !^(index.php文件|媒体| CSS | JS |图片|的robots.txt) RewriteCond%{QUERY_STRING} ^(。)$ RewriteRule ^(。)$ http://abc.com/ [L]
这会返回500内部服务器错误。
尝试C)
RewriteEngine on
RewriteCond $1 !^(index\.php|media|css|js|images|robots\.txt)
#RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ http://abc.com/ [R=302,L]
我承认我在这个.htaccess sintax上有点迷失。
尝试D)
RewriteEngine on
RewriteCond $1 !^(index\.php|media|css|js|images|robots\.txt)
RewriteCond %{REQUEST_URI} !^/
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ http://abc.com/ [R=302,L]
请指教, MEM
答案 0 :(得分:5)
以下内容应该有效:
RewriteCond %{QUERY_STRING} .
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule ^ /index.php/? [L]
来自Apache文档:
如果要删除现有内容 查询字符串,结束替换 字符串只有一个问号
编辑(再次):作为外部重定向(如果您的应用程序中根本没有任何查询字符串,则可能甚至不需要第二个RewriteCond):
这将告诉客户端请求不带查询字符串的相同URI。
RewriteEngine on
# redirect to same URI, but without query string
RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI}? [R=301]
# CodeIgniter "magic"
RewriteCond $1 !^(index\.php|media|css|js|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
答案 1 :(得分:2)
我从你的描述中确切地知道你所追求的是什么,所以你应该根据你的具体需要保留或删除第二个RewriteCond。
RewriteEngine On
# Remove the query string with a redirect
RewriteCond %{QUERY_SRING} !=""
# But only if the path ended with a /
# (remove this to redirect anything with a query string)
RewriteCond %{REQUEST_URI} /$
RewriteRule .* /$0? [R=301,L]
# Then perform your internal rewrite
RewriteCond $1 !^(index\.php|media|css|js|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
答案 2 :(得分:1)
可能是因为你在那里添加了 QSA - 这意味着查询字符串追加。
答案 3 :(得分:0)
RewriteCond %{REQUEST_URI} ^(.*/)([^/]+)$
RewriteRule . %1 [R=301,L]