Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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文件但不工作_Php_.htaccess_Mod Rewrite - Fatal编程技术网

Php 重写.htaccess文件但不工作

Php 重写.htaccess文件但不工作,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我希望重写此url: http://salessurface.com/overseas/sub_page_details/MBBSAbroad/MBBS-in-UK/7 进入: http://salessurface.com/overseas/sub_page_details.php?sup_menu=MBBS%20Abroad&menu=MBBS-在英国和主菜单中,id=7 我尝试将以下内容添加到.htaccess文件: RewriteEngine on RewriteCond %{REQU

我希望重写此url:

http://salessurface.com/overseas/sub_page_details/MBBSAbroad/MBBS-in-UK/7

进入:

http://salessurface.com/overseas/sub_page_details.php?sup_menu=MBBS%20Abroad&menu=MBBS-在英国和主菜单中,id=7

我尝试将以下内容添加到.htaccess文件:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ overseas/sub_page_details.php?sup_menu=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ overseas/index.php?sup_menu=$1&menu=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)$ overseas/index.php?
sup_menu=$1&menu=$2&main_menu_id=$3 [L]
但它不起作用


如何完成重写?

您不需要条件,只需一条规则即可:

RewriteEngine on
RewriteRule ^overseas/sub_page_details/(.*)/(.*)/(.*) /overseas/sub_page_details.php?sup_menu=$1&menu=$2&main_menu_id=$3 [NC,L]
这将采用
子页面\u details
之后的路径,并将第一部分放在
辅助菜单中,第二部分放在
菜单中,第三部分放在
主菜单id中

但是我注意到,在您的示例URL中,您在真实URL中使用
MBBS%20
,但在重写的URL中使用
MBBSAbroad
,如果这不是一个拼写错误,并且真实URL上有一个没有重写URL的空间,那么您需要对该选项使用不太具体的重写:

RewriteEngine on
RewriteRule ^overseas/sub_page_details/MBBSAbroad/(.*)/(.*) /overseas/sub_page_details.php?sup_menu=MBBS\ Abroad&menu=$1&main_menu_id=$2 [NC,L]

这将对URL的
sup\u菜单
部分进行硬编码,并在
MBBSAbroad
之后选择路径,将第一部分放在
菜单
中,第二部分放在
主菜单id
中。您不需要条件,只需一条规则即可:

RewriteEngine on
RewriteRule ^overseas/sub_page_details/(.*)/(.*)/(.*) /overseas/sub_page_details.php?sup_menu=$1&menu=$2&main_menu_id=$3 [NC,L]
这将采用
子页面\u details
之后的路径,并将第一部分放在
辅助菜单中,第二部分放在
菜单中,第三部分放在
主菜单id中

但是我注意到,在您的示例URL中,您在真实URL中使用
MBBS%20
,但在重写的URL中使用
MBBSAbroad
,如果这不是一个拼写错误,并且真实URL上有一个没有重写URL的空间,那么您需要对该选项使用不太具体的重写:

RewriteEngine on
RewriteRule ^overseas/sub_page_details/MBBSAbroad/(.*)/(.*) /overseas/sub_page_details.php?sup_menu=MBBS\ Abroad&menu=$1&main_menu_id=$2 [NC,L]

这将对URL的
sup\u菜单
部分进行硬编码,并在
mbbsaboard
之后选择路径,并将第一部分放入
菜单
,第二部分放入
主菜单id

中,最后一个
重写规则
不应该是
^([^/]+)/([^/]+)/([^/]+)/([^/]+)$
因为第二个和第三个是相同的正则表达式?不起作用,但如果删除最后两个规则而只保留第一个规则,它会起作用吗?最后一个
重写规则不应该是
^([^/]+)/([^/]+)/([^/]+)$
因为第二个和第三个规则是相同的正则表达式?不起作用,但如果删除最后两个规则而只保留第一个规则,它会起作用吗?