如果缺少尾部斜杠或带参数,PHP重定向到自定义URL

时间:2016-07-02 14:59:53

标签: php redirect

如果我的访问者使用index.php?permalink=query等任何网址或REQUEST_URI

上缺少尾随斜杠,我想重定向到自定义网址

我不明白为什么这对我不起作用。对于url参数,它的工作正常。

以下代码我做错了什么?

    $requesturl = $_SERVER['REQUEST_URI'];

    if($requesturl == "/index.php?permalink=".$query || substr($requesturl, -1) != '/') {
        $redirect_requesturl = $baseurl."/".$query."/";
        Header( 'HTTP/1.1 301 Moved Permanently' );
        Header( 'Location: ' . $redirect_requesturl );exit;
    }

当查询到达index.php?permalink=$query时,它会重定向,如果URL不包含尾部斜杠,那么它不会重定向。

我的.htaccess如下:

RewriteEngine On
RewriteBase /
RewriteRule ^([^/.]+)?/$ index.php?permalink=$1&%{QUERY_STRING}

我无法使用.htaccess强制所有网址都包含尾部斜杠,因为某些重要的网址不包含尾部斜杠。

修改

虽然现在在.htaccess中使用以下内容,但它会为css或js或字体文件添加尾部斜杠,例如otf / ttf / woff等。

RewriteCond %{REQUEST_URI}  !\.(php|html?|jpg|gif|png|jpeg|pdf|doc|docx|css|js|xml|xls|xsl|txt|ico|eot|svg|ttf|woff|woff2|otf|flv|swf)$
RewriteRule ^(.*)([^/])$ http://%{HTTP_HOST}/$1$2/ [L,R=301]

1 个答案:

答案 0 :(得分:0)

如果我的访问者使用index.php?permalink=query等任何网址或REQUEST_URI

上缺少尾随斜杠,我想重定向到自定义网址

您可以使用以下规则来完成此任务:

RewriteEngine on

# if the requested uri has querystring
RewriteCond %{QUERY_STRING} ^permalink=.+$ [OR]
# or the trailing slash is missing
RewriteCond %{REQUEST_URI} !/$
# redirect the request to /custom_url 
RewriteRule ^(.+)$ /custom_url? [L,R]