【问题标题】:PHP how to get current rewrited URL excluding querystring?PHP如何获取不包括查询字符串的当前重写URL?
【发布时间】:2013-11-21 06:31:03
【问题描述】:

我在 .htaccess 中使用以下 URL 重写。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^([0-9]+)/([a-zA-Z0-9\&_,-]+)$ business/business_home.php?business_id=$1 [L,QSA]
RewriteRule ^([0-9]+)/([a-zA-Z0-9\&_,-]+)/(about)$ business/business_about.php?business_id=$1 [L,QSA]
RewriteRule ^([0-9]+)/([a-zA-Z0-9\&_,-]+)/(products)$ business/business_products.php?business_id=$1 [L,QSA]
RewriteRule ^([0-9]+)/([a-zA-Z0-9\&_,-]+)/(enquiry)$ business/business_enquiry.php?business_id=$1 [L,QSA]
RewriteRule ^([0-9]+)/([a-zA-Z0-9\&_,-]+)/(contact)$ business/business_contact.php?business_id=$1 [L,QSA]

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php[\s\?] [NC]
RewriteRule ^ - [R=404,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]

那么如何获取当前重写的 URL,不包括查询字符串? 例如:来自具有 URL 的页面:/22/somestring/enquiry?value=5&page=9&item=coffee 我期待:/22/somestring/enquiry

我尝试使用$_SERVER['REQUEST_URI'],但它返回/22/somestring/enquiry?value=5&page=9&item=coffee 还有$_SERVER['REDIRECT_URL'] 给了我我的期望,但它会在某些页面中生成Notice: Undefined index: REDIRECT_URL。还有一些服务器中的it doesn't work

【问题讨论】:

    标签: php .htaccess url url-rewriting


    【解决方案1】:

    我不相信 PHP 对没有查询字符串的 URL 有一个超全局的,但您可以手动删除查询字符串:

    protected function stripQuery($str){
      return preg_replace('/\?(.*)/', '', $str);
    }
    

    【讨论】:

    • 查看问题。 $_SERVER['REDIRECT_URL'] 给了我我所期望的。不是超全球吗
    【解决方案2】:

    在您的 PHP 中,您可以使用这样的代码获取当前 URI无需查询字符串

    $thisuri = preg_replace('/\?.*$/', '', $_SERVER["REQUEST_URI"]);
    

    【讨论】:

    • if ( isset($_SERVER["REDIRECT_URL"]) ) , $_SERVER["REDIRECT_URL"] 本身会生成当前 URI,而无需查询字符串。那为什么要使用 preg_replace
    • 如果你可以先跳过preg_replace。让我编辑。
    • 抱歉,忘记了正则表达式的引号。立即尝试。
    • 注意:未定义索引:REDIRECT_URI
    • 哦,对不起,是REQUEST_URI。现已更正。试试看。
    猜你喜欢
    • 1970-01-01
    • 2012-03-31
    • 2012-08-19
    • 2016-12-31
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    相关资源
    最近更新 更多