繁体   English   中英

将查询字符串重写为一部分URL文件名?

[英]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,并将其转换为查询字符串版本(带有? )。

现在的问题是,当您说:“我要重写为显示为:”时,您的意思是什么?

显示和重写通常是不同的东西:

如果“显示”是用户在浏览器中看到的网址,则您具有:

  • 在您的应用程序中推送这种写url的方式,以便接收的HTML包含正确的显示,这与mod_rewrite无关
  • 您可以选择使用mod_rewrite执行HTTP重定向,因此,当您检测到旧语法( 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM