替换URL查询字符串中的“/”以避免在htaccess中使用404

时间:2012-08-06 05:03:49

标签: apache .htaccess url-rewriting

我有一个有两个参数的网址,我已经用htaccess文件重写了这个

RewriteRule ^subscriber/([^/.]+)/([^/.]+)/?$ subscriber/index.php?id=$1&name=$2 [NC,L]

在某些情况下,名称包含一个“/”,浏览器正在将其视为另一个参数并给我一个404页面。有没有办法使用htaccess文件将“/”替换为其他内容?

2 个答案:

答案 0 :(得分:1)

尝试将其放入文档根目录中的htaccess文件中:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^(.*)name=([^&]*)/(.*)$
RewriteRule ^ %{REQUEST_URI}?%1name=%2-%3 [L]

# Change your existing rule a bit to account for the slash (plus a possible trailing slash):
RewriteRule ^subscriber/([^/.]+)/(.+?)/?$ /subscriber/index.php?id=$1&name=$2 [NC,L]

这将在订阅者/ id参数和所有之后的URI中创建第一个“文件夹”,但尾部斜杠除外name param。name param。然后,第一组规则会重复清除/参数,将-替换为{{1}}。

答案 1 :(得分:0)

设置名称变量

时,可以使用urlencode()函数
$name = 'Michael/';
$name = urlencode($name);
// will return you Michael%08 or something like this

因此,使用this question .htaccess的解决方案可能是:

RewriteEngine On
RewriteCond %{REQUEST_URI} (.*)\\(.*)
RewriteRule .* %1/%2 [R=301]