【问题标题】:Checking empty request uri with .htaccess使用 .htaccess 检查空请求 uri
【发布时间】:2013-06-22 00:23:05
【问题描述】:

我需要重定向来自

的请求
www.mysite.com/?querystring=data 

www.mysite.com/dir/phpfile.php/?querystring=data 

表示只翻译request_uri为空的url(例如

www.mysite.com/css/style.css 

不应翻译),并且查询字符串不为空(例如主页

www.mysite.com/ 

不应翻译)。

我写了这段代码

RewriteCond %{HTTP_HOST} ^www.mysite.com$ [NC]
RewriteCond %{REQUEST_URI} ^/$ 
RewriteRule ^/?(.*)$ www.mysite.com/$1 [QSA]

但它不起作用。有什么建议吗?

【问题讨论】:

    标签: .htaccess query-string http-host


    【解决方案1】:

    您拥有的规则中包含没有协议的域名,它看起来像 mod_rewrite 的 URI 或文件路径名。此外,您没有重写它,因为 $1 在您的匹配中反向引用了分组 (.*),这 必须 什么都不是,因为您的条件表明 URI 只能是 /。你可能想要这样的东西:

    RewriteCond %{HTTP_HOST} ^www.mysite.com$ [NC]
    RewriteRule ^/?$ /dir/phpfile.php/ [L,R]
    

    查询字符串将自动附加到末尾。如果您不想从外部重定向浏览器(从而更改地址栏中的 URL),请删除 R,如果您想要永久重定向,请将其替换为 R=301

    【讨论】:

    • 我懒于定义自己的需求。您的解决方案还将 www.mysite.com 转换为 www.mysite.com/dir/phpfile.php/。这对我的网站来说是不可接受的。我编辑了问题。
    【解决方案2】:
    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{QUERY_STRING} ^(.+)$ [NC]
    RewriteRule ^$ /dir/phpfile.php/ [L,QSA,R=302]
    

    一旦您确认它工作正常,请将R=302 替换为R=301。在测试你的 mod_rewrite 规则时避免使用R=301(永久重定向)。

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多