Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php 如何使用.htaccess重写URL

Php 如何使用.htaccess重写URL,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我对url重写一点也不熟悉,所以我可能有一个简单的问题要问一些知道的人 <a href="/category.php?id=<?php echo $row['id'];?>/<?php echo str_replace(' ', '-', strtolower($row['name']));?>"><?php echo $row['name'];?></a> 试试这个 RewriteEngine On RewriteCond %{HT

我对url重写一点也不熟悉,所以我可能有一个简单的问题要问一些知道的人

<a href="/category.php?id=<?php echo $row['id'];?>/<?php echo str_replace(' ', '-', strtolower($row['name']));?>"><?php echo $row['name'];?></a>
试试这个

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.birthdaycakenames.com [NC]
RewriteRule ^(.*)$ http://birthdaycakenames.com/$1 [L,R=301]

AddDefaultCharset UTF-8

RewriteRule ^/(css|js|img)/(.*)?$ /$1/$2 [L,QSA,R=301]
RewriteRule ^category/$ category.php
RewriteRule ^([a-zA-Z0-9-/]+)/([a-zA-Z0-9-/]+)/?$ detail.php?title=$1&id=$2
RewriteRule ^([a-zA-Z0-9-/]+)/?$ detail.php?id=$1
RewriteRule ^category/([^/]+)/(.*)$ category.php?id=$1&name=$2

Options -Indexes

此规则定义没有多大意义:您使用了两个反向引用(
$1
&2
),但在正则表达式中只有一个捕获括号对:

RewriteRule ^category/(.+)$ category.php?id=$1&id=$2
请尝试这样做:

RewriteRule ^category/([^/]+)/(.*)$ category.php?id=$1&name=$2
这里的问题是您是否需要名称(第二个反向引用解析为的值)。因为脚本通常更喜欢对ID进行操作。如果该参数不是必需的,那么您只需将其从
重写规则的目标规范中删除即可:

RewriteRule ^category/([^/]+)/? category.php?id=$1

一般注意:实际上,您当前在php中生成的URL是无效的。像
id=1/all happy birth cake
这样的查询字符串无效,您必须在其中转义斜杠(
/
),或者将名称指定为第二个单独的参数:
http://birthdaycakenames.com/category.php?id=1&name=all-生日快乐蛋糕


您可能还希望向该规则添加
QSA
标志:

RewriteRule ^(.*)$ http://birthdaycakenames.com/$1 [L,R=301,QSA]


除此之外,我不确定这是否真的是您想要的:
RewriteRule^category/$category.php
,因为这意味着脚本
category.php
将在没有任何参数的情况下被调用。例如,如果该脚本能够在不显示可用类别或类似类别列表的情况下工作,那么这可能很好。但这并不典型

更改
http://birthdaycakenames.com/category.php?id=1/all-生日蛋糕快乐
http://birthdaycakenames.com/category/1/all-happy-birthday-cake
您需要以下两条规则:

RewriteEngine on


RewriteCond %{THE_REQUEST} /category\.php\?id=([^/]+)/([^\s&]+) [NC]
RewriteRule ^ /category/%1/%2? [L,R]
RewriteRule ^category/([^/]+)/([^/]+)/?$ /category.php?id=$1/$2 [NC,L]

尝试此操作并重写url
http://birthdaycakenames.com/category/1/all-happy-birthday-cake
我更新了它,但现在它的重定向到我也更新了RewriteRule^category/([^/]+)/?category.php?id=$1,但再次重定向以删除该规则,如上所述:
RewriteRule^category/$category.php
您能用php和.htaccess回复完整代码吗?所以我很容易更新它。好的,我删除了它RewriteRule^category/$category.php,但仍然相同
RewriteEngine on


RewriteCond %{THE_REQUEST} /category\.php\?id=([^/]+)/([^\s&]+) [NC]
RewriteRule ^ /category/%1/%2? [L,R]
RewriteRule ^category/([^/]+)/([^/]+)/?$ /category.php?id=$1/$2 [NC,L]