[英]Rewrite query string into part of the URL file name?
我有一个php网站,URL显示如下:
http://www.example.com/cheap-call-single.php?country=ALBANIA
我想重写它,以显示为:
http://www.example.com/cheap-international-calls-ALBANIA.php
我搜索了许多唯一的生成器,它们都说要使用:
RewriteEngine On
RewriteRule ^cheap-international-calls-([^/]*)\.php$ /cheap-call-single.php?country=$1 [L]
但这对我不起作用,请注意服务器已启用正确的Apache设置。
有人可以帮我正确的语法吗?
您显示的rewriteRule
进行相反的处理,它以长格式接收传入的url,并将其转换为查询字符串版本(带有?
)。
现在的问题是,当您说:“我要重写为显示为:”时,您的意思是什么?
显示和重写通常是不同的东西:
如果“显示”是用户在浏览器中看到的网址,则您具有:
cheap-call-single.php?country=ALBANIA
)时,将在正确的位置重定向用户,然后浏览器会重新执行该请求(并且那么您的服务器上应该有一个cheap-international-calls-ALBANIA.php
文件,否则它是最终的404) cheap-call-single.php
),则公开的rewriteRule是正确的并返回第一步,这是您的应用程序,应在HTML端显示正确的url。 。 现在,如果您确实有cheap-international-calls-ALBANIA.php
并且您希望您的应用程序根据查询字符串参数使用cheap-call-single.php
将传入请求重写到此文件,您将遇到一些问题。 在请求的查询字符串部分上编写规则总是很复杂,查询字符串参数可能以任何顺序出现,是否可以使用urlencoding编写,等等。默认情况下,rewriteRules不使用查询字符串部分。
就像这样:
RewriteCond %{REQUEST_FILENAME} cheap-call-single\.php [NC]
RewriteCond %{QUERY_STRING} (^|&|%26|%20)country(=|%3D)([^&]+) [NC]
RewriteRule .* /cheap-international-calls-%3.php [L,R]
未经测试(不确定\\.
),但仍无法管理国家(地区)单词中的每个字母都将使用urlencode编码,并且无法管理国家名称的大写字母。 您将需要RewriteMap将其转换为大写形式。 但是已经让我头疼了,这是您真正需要的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.