如何删除问号

时间:2014-01-02 15:02:50

标签: php .htaccess

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /domain.com/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)/?$ /domain.com/$1.php [L]

我正在使用此代码删除问号,但它无效,尝试http://domain.com/details?id=71http://domain.com/details/id/71 请帮帮我哪里错了?

提前致谢

3 个答案:

答案 0 :(得分:1)

我不确定你在第一次重写时想要完成什么,但对于第二次(最后三行),如果传入 URI不是实际的目录或文件,您想要将details/id/71重写为/details.php?id=71吗?

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$  /$1.php?$2=$3 [L]

应该让你靠近,假设总有3个字段。在RewriteRule中,您不会再次放置域名。

答案 1 :(得分:1)

您的代码无法远程执行任何操作。当使用扩展显式请求时,您的代码只会删除php扩展名,并在内部将其添加回来。为了使http://domain.com/details?id=71重定向到http://domain.com/details/id/71,您需要:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\s/+([^/]+?)(?:\.php|)\?([^=]+)=([^&\ ]+)
RewriteRule ^ /%1/%2/%3? [L,R]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$  /$1?$2=$3 [L]

你希望之前你的规则删除php扩展

答案 2 :(得分:0)

假设您的脚本名为details.php,则遵循以下单一规则:

RewriteRule details/(.*)/(.*)/$ /details.php?$1=$2

应将www.domain.com/details/id/71重写为www.domain.com/details.php?id=71

您不需要所有其他内容来删除.php扩展名。