3

我有一个查询字符串,它会更改页面的内容,具体取决于用户在 url 中问号后输入的内容。

http://mysite.subdomain.com/?3

将加载分配给 ID 3 的内容

http://mysite.subdomain.com/?34

加载分配给 34 的内容。

我需要在我的 .htaccess 文件中输入什么,以便当用户访问

http://mysite.subdomain.com/1234

它加载如果用户输入将加载的内容

http://mysite.subdomain.com/?1234

本质上我想清理 url 并删除问号。谢谢。(我意识到这是一个基本问题)

4

2 回答 2

1

无 htaccess

由于您的 javascript 已经处理了 URL 部分,因此您不需要 htaccess。javascript 获取查询字符串,例如?OdfgzaBv2qY,删除问号并将剩余OdfgzaBv2qY的作为 ID 放入 iFrame。

由于 javascript 正在使用window.location.search脚本,因此希望在 URL 中的问号之后设置变量。所以 www.mysite.com/?3 会起作用,但是当您访问 www.mysite.com/3 时它不会,因为它window.location.search仍然是空的。

htaccess 没有解决方案的原因是因为 htaccess 正在服务器端处理,而 javascript 正在客户端处理。即使 htaccess 正在工作,并且您被重定向到index.html?3javascript,仍然会看到 www.mysite.com/3 URL 而不是最终请求。所以基本上:服务器知道变量在后台设置为 ?3,但 javascript 看到用户看到的内容:没有问号的友好 URL。

编辑 - 你可以试试这个:

<script type="text/javascript"> 
  //GET DATA FROM URL ...http://www.mysite.com/YOUTUBE_ID 
  var DATA = window.location.pathname.replace("/", ""); 

  window.onload = function() { 
    var YouTube = document.getElementById('YouTube'); 
    YouTube.src = "http://www.youtube.com/embed/" + DATA; 
  }; 
</script>

window.location.pathname 应该采用/3并替换/. 而 window.location.search?3参与其中并替换?

如果有人需要启动 htaccess

一个基本的 .htaccess 文件是:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /

RewriteRule ^([0-9]+)$ index.php?id=$1 [L]
</IfModule>

当然 index.php?id=1 应该替换为您用来执行请求的任何页面。

一个简短的解释:

  • 规则以 ^ 开头,然后在基本 URL 后面查找数值,因此如果您有http://www.domain.com/42,则规则在最后一个 / 之后开始
  • $ 定义规则正则表达式的结尾。
  • index.php?id=$1 是必须加载的 URL(其中 $1 是参数 1: ([0-9]+)
  • [L] 是一个标志“Last”,表示 htaccess 不应该寻找其他适用的规则

请注意,这不适用于http://www.domain.com/49/ .. 因为末尾的斜线不匹配。这可以通过以下方式完成:

RewriteRule ^([0-9]+)/$ $1 [L,R=301]
RewriteRule ^([0-9]+)$ index.php?id=$1 [L]

这首先查看是否有斜杠,如果有则重定向到“无斜杠”url(R=301:重定向 301 = 永久重定向),然后匹配第二条规则并执行请求。

于 2013-03-31T20:40:16.627 回答
0

试试这个

RewriteRule ^([a-zA-Z0-9\-]+)$ index.php?id=$1 [QSA,L,NC]
于 2013-03-31T20:39:52.250 回答