Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 将所有URL重写为以path作为GET变量的索引_Php_Regex_.htaccess_Rewrite - Fatal编程技术网

Php 将所有URL重写为以path作为GET变量的索引

Php 将所有URL重写为以path作为GET变量的索引,php,regex,.htaccess,rewrite,Php,Regex,.htaccess,Rewrite,我正在尝试将对其他index.php文件的所有请求转发到根index.php文件,路径编码为GET变量。以下是一些我所指的例子: 将成为: 将成为: 将成为: 如何使用.htaccess文件实现这一点 编辑 明确地说,以下是我希望实现的目标: 如果路径指向一个名为“index.php”的文件,只要它不是根索引文件,它就会重定向。注意,所说的index.php文件可能包含了应该包含的GET变量 如果路径以斜杠结尾,那么in应该重定向,只要它不是根。同样,注意到path可以得到应该包含的变量

我正在尝试将对其他index.php文件的所有请求转发到根index.php文件,路径编码为GET变量。以下是一些我所指的例子:

将成为:

将成为:

将成为:

如何使用.htaccess文件实现这一点

编辑 明确地说,以下是我希望实现的目标:

  • 如果路径指向一个名为“index.php”的文件,只要它不是根索引文件,它就会重定向。注意,所说的index.php文件可能包含了应该包含的GET变量
  • 如果路径以斜杠结尾,那么in应该重定向,只要它不是根。同样,注意到path可以得到应该包含的变量
  • 否则,它不应重定向任何其他路径

总之,只有指向index.php文件(不是根)或以斜杠结尾的路径才应重定向。

您可以使用此.htaccess文件

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule (.*) index.php?path=$1 [L]
</IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则(.*)index.php?路径=$1[L]

我建议学习一下Apache的mod_重写

RewriteEngine On
RewriteRule ^(.*/index.php)$ index.php?path=$1
请注意,这将只重写index.php中的URL,而不使用其他URL,因为这是您指定的行为。如果要将所有URL重写到索引:

RewriteEngine On
RewriteRule ^(.*)$ index.php?path=$1

将此代码放入
文档\u ROOT/.htaccess
文件:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php?path=$1 [L,QSA]

是的,可以在一个小时内完成。htaccess@Dave如何使用.htaccess文件实现这一点?通过做一些研究,我可以建议谷歌作为一个起点。一旦你尝试过这个网站,当你有东西要看的时候,带着一些问题回来。这是一个帮助网站,不是一个为我做事的网站。@Dave,我已经研究过了,但我仍然有问题。我从观察事物如何运作中学到了最好的经验。如果有人能告诉我如何做到这一点,那将对我有很大帮助。如果你不想帮忙,你不必回复。谢谢你的回复!您是对的,我希望重写名为index.php的路径。但是,我也希望在没有指定文件的地方重写路径,比如我的第二个示例。如何做到这一点?然后使用我的第二个例子。但您可能还需要添加RewriteCond%{REQUEST_FILENAME}-f,或者将RewriteRule的正则表达式更改为^(.*\.php)$。这可以防止Apache将URL重写到您可能只想保留的css、js或图像文件。细节取决于您的文件结构、Apache配置以及PHP的脚本编写方式。唯一的问题是它无限地将root index.php文件重定向回自身。我如何解决这个问题?谢谢你的帮助!谢谢你的回复!这会重写,但是URL栏不会更改。如何将URL栏更改为新的重写地址。可能吗?对不起,我不熟悉URL重写。是的,这是可能的,将最后一行设置为:
RewriteRule^(+)$/index.php?path=$1[L,QSA,R]
谢谢,这很有效!最后一个问题:如果路径中存在.php文件,则不会重定向/重写。例如,如果我使用路径:
http://my-site.com/this/is/the/path/index.php
如果文件确实存在,则不会重定向。这是如何修复的?这会重定向所有内容、样式表、js文件和图像。我只想重定向
index.php
文件和路径,但没有指定的文件(如“)。但这就是以前的情况,您编写了
如果路径上存在.php文件,则不会重定向/重写
我建议不要通过注释更改问题的性质,我回滚了上次的更改。