【问题标题】:htaccess won't rewrite urlhtaccess 不会重写 url
【发布时间】:2013-12-24 15:21:41
【问题描述】:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^product/([0-9]+)/([0-9]+)/([0-9]+)/([0-9]+)/([a-zA-Z]+)/$ product.php?id=$1&srl=$2&item=$3&page=$4&title=$5#titleProduct

当我点击 f5 按钮进行刷新时,URL 仍然存在并且没有被重写。我尝试使用“新”重写链接访问,但它不起作用。

【问题讨论】:

  • 如果没有设置其他内容,您是否检查过主 conf 文件中的 AccessFileName?
  • 目前我正在使用免费的网络托管服务。我在哪里可以找到这个文件?
  • 您可能无法访问 apache2 配置文件。询问您的提供商是否可以使用 .htaccess 文件。
  • “当我按下 f5 按钮进行刷新时,URL 仍然存在并且没有被重写。” 你在地址栏中输入了什么 URL?按 F5 应该完成什么(你知道重写完全是服务器内部的,对吧?)
  • 哇,这意味着我需要更新每个文件以进行“新”重写?所有文件都包含带有“旧”链接的不同超链接。我想如果我写一个.htaccess文件,所有的url都会自动重写。

标签: .htaccess mod-rewrite url-rewriting


【解决方案1】:

哇,这意味着我需要更新每个文件以进行“新”重写?所有文件都包含带有“旧”链接的不同超链接。我想如果我写一个.htaccess文件,所有的url都会自动重写。

您正在考虑浏览器重定向,它会更改地址栏,重写会采用更好看的 URL,并在内部将 URI 重写为服务器可以理解的内容。查看this answer for a better explanation of this process的上半部分。

因此,如果浏览器实际请求 product.php 文件,您可以进行浏览器重定向,然后 重定向 到假的漂亮 URL。然后,浏览器将重新发送一个新请求,请求漂亮的 URL,服务器得到它,在内部将它 back 重写为 php 文件(您拥有的规则)。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /product\.php\?id=([^&]+)&srl=([^&]+)&item=([^&]+)&page=([^&]+)&title=([^&\ ]+)
RewriteRule ^product.php$ /product/%1/%2/%3/%4/%5/ [L,R=301]

这将采用 /product.php\?id=123&srl=abc&item=qwerty&page=blah&title=something URI 并将带有 301 的浏览器重定向到看起来更漂亮的 URL。那么你的规则应该在内部重写它。

无论如何,您确实应该将您提供的链接更改为更好的 URL,依靠 mod_rewrite 来完成两端的工作真的效率低下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 2011-03-19
    • 2022-01-18
    • 2014-04-27
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多