【问题标题】:URL rewriting with parameters in .htaccess使用 .htaccess 中的参数重写 URL
【发布时间】:2017-07-21 16:00:10
【问题描述】:

我一直在从谷歌搜索很多相关的教程等,以自己解决这个问题,但运气为零。所以我在这里问。我正在尝试通过重写来'美化'我的项目 URL。我不确定这些是否都能实现,因为我刚刚开始了解这个主题。

我正在本地项目文件夹 localhost/example 上工作 'example'。文件 '.htaccess' 位于该文件夹中。我设置了以下内容:

RewriteEngine On 
RewriteBase /example

所以基本上我的应用程序现在始终生成一个至少包含 1 个参数和另一个指向当前位置的 URL。

当前网址:localhost/example/admin.php?e=2&p=frontpage

幻想:localhost/example/admin/2/frontpage

关于参数:

  • p 代表选中页面
  • e 代表事件

好吧,让我们认为这一切都很容易实现,我是否必须更改所有属性以匹配当前显示的 url?

现在他们是: href="?e=2&p=settings"

他们应该是: href="2/settings" ?

我正在检查 GET 参数 P 的值,然后将该页面包含到内容区域中。

差不多就是这样,对我来说太复杂了,但出于教育目的,我真的很想彻头彻尾地理解这一点。谢谢。

编辑:

With the added 
RewriteRule ^admin.php/(.*)$ /admin.php?e=$1 [L,QSA]

I am getting lot of pathing errors, whole site is without styling and js files.

编辑 2:

RewriteEngine On 
RewriteBase /example

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /admin.php/e=?(.*)$/p=?(.*)$ /admin.php?e=$1?p=$2 [L,QSA]

Now urls are following:
http://localhost/example/admin.php/2/inc/vex/vex.css
http://localhost/example/admin.php/2/css/modestgrid.css

It is not showing the page in url and the paths are not correct. 
They should be http://localhost/example/admin.php/css/modestgrid.css

【问题讨论】:

  • ?e=2&p=settings 是您应该期望和处理的请求参数的形式,因为它更容易,php 已经在 $_GET 中保存了单独的值,您不必自己解析。关于一般重写:当然可以,这是重写的绝对标准。
  • 使用 RewriteRule ^admin.php/(.*)$ /admin.php?e=$1 [L,QSA] 我在 Chrome 控制台中遇到很多错误。它们看起来像路径错误,因为整个页面刚刚丢失了所有样式和 js 文件。
  • 这可能意味着您对资产文件的引用已损坏,但这与您如何指定参数无关。可能是您不小心也重写了这些引用...
  • 我不知道自己在做什么。

标签: php html .htaccess url-rewriting


【解决方案1】:

您的问题有点含糊、自相矛盾,并且不清楚您实际上想要如何处理(参考)您的资产文件。但总的来说,我会说这应该是让你前进的起点:

RewriteEngine On 
RewriteBase /example

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/(.*)$ $1.php?e=$2&p=$3 [END]

为此,您显然需要安装和加载 apache 重写模块,您需要注意完全启用动态配置文件的解释(AllowOverride 指令)并且您必须将此类文件放在http服务器进程具有读取权限的正确位置。

如果您收到内部服务器错误(http 状态 500),则可能是因为您运行的是非常旧版本的 apache http 服务器。在这种情况下,您可能需要将[END] 标志替换为[L] 标志,可能 也可以在这里使用。在这种情况下,您会在您的 http 服务器错误日志文件中找到相关提示。


还有一个一般提示:您应该始终喜欢将此类规则放在 http 服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess 样式文件)。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置(阅读:非常便宜的托管服务提供商)或您有一个依赖于编写自己的重写规则的应用程序(这显然是一个安全噩梦)的情况下作为最后一个选项被支持)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多