为什么htaccess URL重写规则不起作用?

时间:2019-01-11 06:56:10

标签: .htaccess url mod-rewrite

我正在尝试为我的网站创建一个漂亮的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

1 个答案:

答案 0 :(得分:1)

恐怕您正在以错误的方式进行操作,但壮举并非如此!实际上,这是人们在首次使用Apache的重写规则时会遇到的常见问题。

因此,您有了一个脚本-const cluster = require('cluster'); if (cluster.isMaster) { const fn = cluster.fork(); setTimeout(_=>fn.process.kill(), 300); } else { for(;;) { process.stdout.write('#'); } } -该脚本将游戏名称作为通过查询字符串参数game.php的输入,因此game

现在,您想通过以game.php?game=some-game的形式屏蔽网址,使网址看起来更好。

问题是您正在尝试通过将原始脚本URL重定向到漂亮的URL来做到这一点,而这几乎是任何人首先做这种事情的目的。

关键是您要屏蔽 URL。也就是说,您想将原始的丑陋网址打扮成更好的东西。

这是行不通的,因为您不是用好看的方式掩盖丑陋,而是用另一种方式来做-您是在用丑闻来掩盖美好。

也就是说,如果您输入难看的网址,它会重定向到漂亮的网址,但是问题在于该位置不存在任何资源,因此无法正常工作。

您需要做的是-用漂亮的URL遮盖丑陋的URL,以便当您在地址栏中键入漂亮的URL时,服务器知道该发送并将请求发送到丑陋的URL并提供结果响应在漂亮的网址下。

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

实现这一目标的规则很简单:

game/some-game

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

相关问题