Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用.htaccess中的参数重写URL_Php_Html_.htaccess_Url Rewriting - Fatal编程技术网

Php 使用.htaccess中的参数重写URL

Php 使用.htaccess中的参数重写URL,php,html,.htaccess,url-rewriting,Php,Html,.htaccess,Url Rewriting,我已经从谷歌搜索了很多相关的教程等来自己解决这个问题,但运气不佳。因此,我在这里问。我试图通过重写来“美化”我的项目URL。我不确定这些都是可以实现的,因为我刚刚开始思考这个问题 我正在处理localhost项目文件夹localhost/example上的“example”。文件“.htaccess”位于该文件夹中。在这里,我设置了以下内容: RewriteEngine On RewriteBase /example 因此,基本上我的应用程序现在生成一个URL,该URL始终至少包含一个参数和

我已经从谷歌搜索了很多相关的教程等来自己解决这个问题,但运气不佳。因此,我在这里问。我试图通过重写来“美化”我的项目URL。我不确定这些都是可以实现的,因为我刚刚开始思考这个问题

我正在处理localhost项目文件夹localhost/example上的“example”。文件“.htaccess”位于该文件夹中。在这里,我设置了以下内容:

RewriteEngine On 
RewriteBase /example
因此,基本上我的应用程序现在生成一个URL,该URL始终至少包含一个参数和另一个指向当前位置的参数

当前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

你的问题有点模糊、矛盾,也不清楚你到底想如何处理(参考)你的资产文件。但总的来说,我认为这应该是让你走下去的起点:

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
样式文件)。这些文件是出了名的容易出错,难以调试,而且它们确实降低了服务器的速度。只有在您无法控制主机配置的情况下(读:非常便宜的主机服务提供商),或者如果您的应用程序依赖于编写自己的重写规则(这显然是一个安全噩梦),才支持将它们作为最后一个选项.

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