重写.htaccess文件但不能正常工作

时间:2017-10-19 04:54:26

标签: php .htaccess mod-rewrite

我希望重写这个网址:

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-in-UK&main_menu_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]

但它不起作用。

如何完成重写?

1 个答案:

答案 0 :(得分:0)

您不需要这些条件,只需遵守规则即可:

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

这将采用sub_page_details之后的路径,并将第一部分放在sup_menu中,将第二部分放在menu中,将第三部分放在main_menu_id中。

但我注意到,在您的示例网址中,您在真实网址中使用MBBS%20Abroad,但在重写的网址中使用MBBSAbroad,如果这不是拼写错误且真实网址上有空格,则不会没有重写的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]

这将对网址的sup_menu部分进行硬编码,并在MBBSAbroad之后选择路径,并将第一部分放在menu中,将第二部分放在main_menu_id中。