我正在尝试执行301重定向并一次性重写我的URL参数。我一直在这里听一些答案,但无法让它发挥作用。这是我试过的。评论表明我希望它做什么,而不是它实际做了什么。
RewriteEngine on
# Redirect from "/country.php?country=FR&recipe=Croissant" to "/FR/Croissant"
RewriteCond %{THE_REQUEST} ^country\.php/?country=([A-Z]{2})&recipe=(.+) [NC]
RewriteRule ^/%1/$2 [NE,L,R=301]
# Redirect from "/country.php?country=FR" to "/FR"
RewriteCond %{THE_REQUEST} ^country\.php/?country=([A-Z]{2}) [NC]
RewriteRule ^/%1 [NE,L,R=301]
# Internally map "/FR/Croissant" to "/country.php?country=FR&recipe=Croissant"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/([A-Z]{2})/(.+)/?$ country\.php/?country=$1&recipe=$2 [L]
# Internally map "/FR" to "/country.php?country=FR"
RewriteRule ^/([A-Z]{2})/?$ country\.php/?country=$1 [L]
但这不起作用。当我尝试其中一个例子时没有任何事情发生:
/country.php?country=FR&recipe=Croissant
停留/country.php?country=FR&recipe=Croissant
,/FR/Croissant
返回404.
我在域的子目录(localhost / food /,localhost / food / index.php和localhost / food / country.php)上运行它,但htaccess文件放在该目录{{1} }。
我做错了什么?
答案 0 :(得分:1)
您需要修复正则表达式模式和一些语法问题:
RewriteEngine on
RewriteBase /food/
# Redirect from "/country.php?country=FR&recipe=Croissant" to "/FR/Croissant"
RewriteCond %{THE_REQUEST} /country\.php\?country=([A-Z]{2})&recipe=([^&\s]*) [NC]
RewriteRule ^ %1/%2? [NE,L,R=301]
# Redirect from "/country.php?country=FR" to "/FR"
RewriteCond %{THE_REQUEST} /country\.php\?country=([A-Z]{2}) [NC]
RewriteRule ^ %1? [NE,L,R=301]
# ignore rules below for files and directories
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# Internally map "/FR/Croissant" to "/country.php?country=FR&recipe=Croissant"
RewriteRule ^([A-Z]{2})/(.+?)/?$ country.php?country=$1&recipe=$2 [L,QSA]
# Internally map "/FR" to "/country.php?country=FR"
RewriteRule ^([A-Z]{2})/?$ country.php?country=$1 [L,QSA]
要修复样式,图像等问题,您需要在css,js,images文件中使用绝对路径而不是相对路径。这意味着您必须确保这些文件的路径以http://
或斜杠/
开头。
或者,您可以在页面HTML的<head>
部分下方添加:
<base href="/food/" />
以便从该基本网址解析每个相对网址,而不是从当前网页的网址解析。