Php 重写URL规则
我接受的URL如下所示:Php 重写URL规则,php,.htaccess,Php,.htaccess,我接受的URL如下所示: http://www.random.com/film/1 我需要做的是将它发送到基本目录中的server.php,然后分解/上的地址,并使用film和1作为变量 我如何做到这一点 目前,该链接表示没有页面存在 对于这种重定向,您应该查看.htaccess文件,而不是与其他列表完全重复: 在.htaccess文件中: RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILE
http://www.random.com/film/1
我需要做的是将它发送到基本目录中的server.php
,然后分解/
上的地址,并使用film和1作为变量
我如何做到这一点
目前,该链接表示没有页面存在 对于这种重定向,您应该查看
.htaccess
文件,而不是与其他列表完全重复:
在.htaccess
文件中:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)$ server.php?$1=$2 [L]
RewriteRule ^([^/]+)$ server.php?$1 [L]
在server.php
中:
$parameterName = 'film';
$parameterValue = isset($_GET[$parameterName]) ? $_GET[$parameterName] : NULL;
if (!is_null($parameterValue)) {
echo "Parameter found";
} else {
echo "Parameter not found";
}
对于这种重定向,您应该查看
.htaccess
文件,而不是与其他列表完全重复:
在.htaccess
文件中:
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)$ server.php?$1=$2 [L]
RewriteRule ^([^/]+)$ server.php?$1 [L]
在server.php
中:
$parameterName = 'film';
$parameterValue = isset($_GET[$parameterName]) ? $_GET[$parameterName] : NULL;
if (!is_null($parameterValue)) {
echo "Parameter found";
} else {
echo "Parameter not found";
}
因为我已经打开了它,所以为apache创建一个
.htaccess
文件,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?(.*)$ server.php?1=$1&2=$2&3=$3&4=$4 [NC,QSA,L]
</IfModule>
第四个参数(在本例中为1
)是可选的,省略它并使用/api-v1/v1/film
或/api-v1/v1/film/
将为您提供:
Array
(
[1] => api-v1
[2] => v1
[3] => film
[4] =>
)
因为我已经打开了它,所以为apache创建一个
.htaccess
文件,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?(.*)$ server.php?1=$1&2=$2&3=$3&4=$4 [NC,QSA,L]
</IfModule>
第四个参数(在本例中为1
)是可选的,省略它并使用/api-v1/v1/film
或/api-v1/v1/film/
将为您提供:
Array
(
[1] => api-v1
[2] => v1
[3] => film
[4] =>
)
与PHP无关;取决于您的服务器。如果您使用Apache,请查看
.htaccess
文件。类似的问题在这个网站上曾经被问过很多次。好吧,这和服务器有关,但我不知道从哪里开始!你提到的那个复制品并不能解释我想要什么。当我输入上面的URL时,如何通过转到server.php解析它,然后让film和1可用?我只需要两个参数。另一个问题只使用1?与PHP无关;取决于您的服务器。如果您使用Apache,请查看.htaccess
文件。类似的问题在这个网站上曾经被问过很多次。好吧,这和服务器有关,但我不知道从哪里开始!你提到的那个复制品并不能解释我想要什么。当我输入上面的URL时,如何通过转到server.php解析它,然后让film和1可用?我只需要两个参数。另一个问题只使用1?非常感谢!还有一件事,如果我没有第二个参数呢。第二部分是可选的!刚刚做了一个编辑,但是使用编辑,opt
将包含斜杠,因此您可以使用PHP中的substr($\u GET['opt',1)
删除它^。我需要前两个总是设置和第三个是可选的。你能最后一次为我修改一下解决方案吗!工作正常,但它给了我以下错误,请求的URL/api-v1/v1/film/在此服务器上找不到,如果号码不在末尾。如果你在末尾加上一个1,它可以工作,但我需要它在末尾没有数字的情况下工作!我在这里遇到的最有帮助的用户!他回答了答案,改变了答案,又回答了一遍,然后又回答了一遍!令人惊叹的!非常感谢你!谢谢!还有一件事,如果我没有第二个参数呢。第二部分是可选的!刚刚做了一个编辑,但是使用编辑,opt
将包含斜杠,因此您可以使用PHP中的substr($\u GET['opt',1)
删除它^。我需要前两个总是设置和第三个是可选的。你能最后一次为我修改一下解决方案吗!工作正常,但它给了我以下错误,请求的URL/api-v1/v1/film/在此服务器上找不到,如果号码不在末尾。如果你在末尾加上一个1,它可以工作,但我需要它在末尾没有数字的情况下工作!我在这里遇到的最有帮助的用户!他回答了答案,改变了答案,又回答了一遍,然后又回答了一遍!令人惊叹的!非常感谢你!在这个版本中需要注意的是,文件
不容易获得,但是在这种情况下,$\u GET['file']=1
,因此如果将URL中的文件
更改为'stuff',PHP需要$\u GET['stuff']
才能获得1
^^对。事实上,既然“值”是可选的,那么您的解决方案@Jon很可能会更适合您。我的解决方案现在将重定向到server.php?film=1
或server.php?film
,这样您就可以轻松地测试php.Hrm中是否没有值,我会将第二条规则修改为variable=value
type,而不仅仅是设置这样的变量容易改变。无论如何,在这种情况下,您的解决方案仍将运行得更好。。。更具可扩展性。应该注意的是,在这个版本中,文件
并不容易获得,而是在这种情况下,$\u GET['file']=1
,因此如果您将URL中的文件
更改为'stuff',PHP需要$\u GET['stuff']
才能获得1
^^对。事实上,既然“值”是可选的,那么您的解决方案@Jon很可能会更适合您。我的解决方案现在将重定向到server.php?film=1
或server.php?film
,这样您就可以轻松地测试php.Hrm中是否没有值,我会将第二条规则修改为variable=value
type,而不仅仅是设置这样的变量容易改变。无论如何,在这种情况下,您的解决方案仍将运行得更好。。。更具可扩展性。