【问题标题】:using htaccess to update browser default mod_rewrite string使用 htaccess 更新浏览器默认 mod_rewrite 字符串
【发布时间】:2016-02-18 16:10:14
【问题描述】:

我知道我知道这是一个愚蠢的问题,但是关于 SO 和其他地方的答案并没有告诉我应该如何做。

我有一个 .htaccess Mod_rewrite,它接受字符串并将其用作index.php?nm=<value> 中的值,如下所示:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?pagenm=$1 [QSA]

我想设置 htaccess 以显示我的页面,即使 URI 没有设置 pagenm 值,例如:www.mywebsite.com/ 确实加载得很好,因为 index.php 页面有一个捕获规则,如果没有 @987654325 @值被赋予使用默认的页内值,但我想要的是浏览器URL被更新 (希望没有刷新,重定向,加载页面两次)

如果没有给出值,则 htaccess 重写为 welcome 以便:

 www.mywebsite.com

将始终在浏览器中显示为

 www.mywebsite.com/welcome

我已经尝试过DirectoryIndex welcome,但这不会更新 URL。

【问题讨论】:

  • 根据定义这是重定向,但由于服务器正在处理重定向,因此您实际上不会加载页面两次。您会收到从服务器发回的标头,并且浏览器会 ping 新地址并点击它。像Redirect "/" "/welcome" 这样的东西就足够了。另一种方法是使用 JS 重写历史记录,但是不考虑重定向需要付出很多努力。
  • 如果没有 mod_rewrite 字符串,我如何告诉 htaccess 我将默认的 index 页面呈现为 mod_rewrite /welcome 并重新加载?只要最终的 PHP 页面不加载两次就是我想要避免的。干杯
  • 我刚刚编辑了评论,而你问:)
  • 下面的答案增加了 302(找到)。一个很好的补充!

标签: .htaccess mod-rewrite


【解决方案1】:

试试这些规则:

RewriteEngine On

# if landing page redirect to /welcome
RewriteRule ^/?$ /welcome [L,R=302]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?pagenm=$1 [QSA,L]

【讨论】:

  • 这就是我一直在寻找的,我不确定用于空字符串检查的 ^/?$ 语法。非常感谢,阿努巴瓦!!
猜你喜欢
  • 2021-12-12
  • 1970-01-01
  • 2012-11-30
  • 2023-03-25
  • 2020-05-05
  • 1970-01-01
  • 2014-08-10
  • 2010-12-12
  • 2011-01-12
相关资源
最近更新 更多