【问题标题】:Avoid .htaccess showing variables at the end of URL避免 .htaccess 在 URL 末尾显示变量
【发布时间】:2012-03-23 05:46:13
【问题描述】:

我在这里遇到了一个奇怪的问题;以下 .htaccess 有效,但现在(更改为专用服务器后)它只是在浏览器地址栏的 url 末尾附加变量;例如:

如果我这样称呼.. http://www.mydomain.com/sports

它被改写成这样.. :( http://www.mydomain.com/index.php?u=sports

我只是希望它保持原样:)

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
RewriteRule ^(.*)$ http://www.mydomain.com/index.php?u=$1 [NC]

提前致谢!

【问题讨论】:

  • 我试过了,但它返回 400 Bad Request 错误:/
  • @Seybsen 只是 .htaccess,为什么?
  • 另外,它在调用 www.mydomain.com 时在末尾添加一个 this:mydomain.com/index.php?u=index.html.var 和它来自的“index.html.var”部分 idk:/

标签: php .htaccess url-rewriting


【解决方案1】:

最后一条规则应该是这样的:

RewriteRule ^([^?]*) index.php?u=$1 [L,QSA]

[QSA] - 当替换 URI 包含查询字符串时,默认 RewriteRule 的行为是丢弃现有的查询字符串,并且 用新生成的替换它。使用 [QSA] 标志会导致 要组合的查询字符串。

[L] - [L] 标志导致 mod_rewrite 停止处理规则集。 在大多数情况下,这意味着如果规则匹配,则无需进一步 规则将被处理。这对应于 Perl 中的最后一个命令, 或 C 中的 break 命令。使用此标志来指示当前 规则应立即应用,无需考虑进一步的规则。

【讨论】:

    猜你喜欢
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2021-03-09
    相关资源
    最近更新 更多