【问题标题】:Why does htaccess URL rewrite rule does not work?为什么 htaccess URL 重写规则不起作用?
【发布时间】:2019-01-11 06:56:09
【问题描述】:

我正在尝试为我的网站创建一个漂亮的 URL。

我有这种类型的 URL:game.php?game=some-game,我想将其显示为:game/some-game。我已经尝试在 htaccess 中编写和重写规则,但没有成功。

首先,我认为 htaccess 文件不起作用,但我输入的自定义错误页面工作正常。我尝试使用 QSA 标志但没有结果。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?game/(.*?)/?$ /game.php?game=$1 [L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /game\.php\?game=([^\&\ ]+)
RewriteRule ^/?game\.php$ /game/%1? [L,R=301]

ErrorDocument 400 /Hacknet-INC/400.php
ErrorDocument 401 /Hacknet-INC/401.php
ErrorDocument 403 /Hacknet-INC/403.php
ErrorDocument 404 /Hacknet-INC/404.php
ErrorDocument 410 /Hacknet-INC/410.php
ErrorDocument 500 /Hacknet-INC/500.php

#Serve .htc files correctly, for IE fixes
AddType text/x-component .htc

php_value upload_max_filesize 300M
php_value post_max_size 10M
php_value max_execution_time 200
php_value max_input_time 200

【问题讨论】:

  • 我猜game.php>game=some-game应该是game.php?game=some-game
  • 在哪里? RewriteRule ^/?game\.php$ /game/%1? [L,R=301]在这一行?
  • 你问题的第二句。

标签: .htaccess url mod-rewrite


【解决方案1】:

恐怕你会以错误的方式解决这个问题,但不要这样做!这实际上是人们第一次使用 Apache 的重写规则时面临的常见问题。

所以你得到了一个脚本 - game.php - 它通过查询字符串参数game 将游戏名称作为输入,所以game.php?game=some-game

现在您想通过以game/some-game 的模式屏蔽它们来使您的网址看起来不错。

问题在于,您试图通过将原始脚本 URL 重定向到不错的 URL 来做到这一点,而这几乎是任何人第一次做这种事情时都会做的事情。

关键是您要屏蔽 URL。也就是说你想把原始丑陋的 url 打扮成更好的东西。

它不起作用,因为不是用漂亮来掩盖丑陋,而是相反 - 你用丑陋来掩盖漂亮。

也就是说,如果您输入丑陋的 url,它会重定向到不错的 url,但问题是该位置不存在任何资源,因此它不起作用。

你需要做的是——用漂亮的 url 掩盖丑陋的 url,这样当你在地址栏中输入漂亮的 url 时,服务器就知道将请求发送到丑陋的 url 并提供结果响应在漂亮的网址下。

然后,您需要去更新系统中的链接以使用漂亮的 url,就是这样。

实现这一点的规则很简单:

RewriteRule ^game/([^/]+) game.php?game=$1 [L]

在此处查看此示例:https://htaccess.madewithlove.be?share=f6863821-b64c-5873-9bd4-9f13b6e4736e

【讨论】:

  • 你好。感谢您的答复。它仍然不起作用。它应该在本地服务器xampp中工作吗?因为这就是我正在使用的。它给了我错误object not found。这是为什么呢?
  • 它应该可以在任何 Apache 服务器上运行,无论在哪里。尝试在重写规则末尾添加[L]。然后,我还会将 game.php 制作成一个几乎空白的文件,其中只有“hello”之类的内容,因此您可以在测试时排除其他问题。如果您随后转到服务器上的 /game/whatever,您应该会看到带有“hello”的白页。
  • 从链接中删除“/”符号后它起作用了:D
猜你喜欢
  • 1970-01-01
  • 2015-07-05
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多