【问题标题】:Rewrite URL containing spaces重写包含空格的 URL
【发布时间】:2010-12-17 13:51:56
【问题描述】:

我有一个格式如下的网址: domain/product.php?name=product a

现在我需要将其重写为: domain/product a(包括单词中的空格)如: http://www.directline-holidays.co.uk/Costa Blanca

我该怎么做?到目前为止,我得到的最接近的结果如下: domain/p/product-a

在.htaccess中使用以下代码

RewriteEngine On 
RewriteRule ^p/([^/]*)/$ destination.php?name=$1

我什至不能使用没有“-”的名称。我需要产品名称,就像它在数据库中一样。这可能吗?

【问题讨论】:

    标签: php apache url mod-rewrite


    【解决方案1】:

    这应该可行:它只会在 /p/ 目录之后到字符串末尾为您提供 URL 字符串的其余部分,在您的情况下应该是 URL 的结尾,对吗?

    RewriteRule ^p/(.*)$ destination.php?name=$1
    

    对于不是产品页面的页面,如果您知道它们将以 .php 文件扩展名结尾,您可以使用以下规则过滤这些页面:

     RewriteCond %{REQUEST_URI} !^.*(destination\.php).*$ 
     RewriteRule ^([^\.php]+)$ destination.php?name=$1
    

    编辑:通过为destination.php添加RewriteCond修复了无限循环条件

    【讨论】:

    • 使用 /p/product name 格式我已经开始工作了,问题是我只想要域名后面的产品名称。没有 /p
    • 我明白了...所以应该是:RewriteRule ^(.*)$ destination.php?name=$1
    • 它将所有内容重定向到destination.php页面...需要进行检查,以便它不会重定向.php页面,如domain/index.php、domain/contact-us.php等页面到目标页面...事件仅键入 domain/ 被重定向到destination.php 页面...知道吗?
    • 我什至尝试过 RewriteRule ^([A-Z0-9]*)$ destination.php?name=$1...但再次找不到对象问题:(
    • @Kunal - 检查我的编辑以获取有关过滤 *.php 文件的另一个建议
    【解决方案2】:

    在 URL 中添加“%20”,如:

    http://www.directline-holidays.co.uk/Costa%20Blanca
    

    以十六进制表示的 20 是空格的 ASCII 数字。

    编辑:

    除了powtac的评论:

    使用 JS encodeURIComponent() 函数对应该在 URL 中使用的值进行编码: http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp

    【讨论】:

    • 如果您使用 PHP 创建链接,请在链接周围添加 urlencode(),它会自动添加 %20 和其他内容。
    • 谢谢,我已经解决了。现在我需要的是重写规则,它允许我只使用产品名称制作 url。请帮忙。
    • @Kunal:试试下面的正则表达式:^[^/]$
    • 您不能有一个带有空格的 URL:您提供的 (domain/product.php?name=product a) 不是有效的 URL。使用正确的形式 (domain/product.php?name=product%20a) 会得到你想要的。
    • @Dor ur soln 工作,但是当我尝试: RewriteRule ^[^/]$ destination.php?id=$1 和 url:localhost/zip2/test 它说找不到对象!有什么想法吗?
    【解决方案3】:

    试试这个规则..

    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule product-name-(.*)\.htm$ product.php?name=$1
    

    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule product/name/(.*)/ product.php?name=$1
    RewriteRule product/name/(.*) product.php?name=$1
    

    【讨论】:

    • 我更喜欢使用我写的第一个。根据我使用的服务器,第二个有问题。
    【解决方案4】:

    你的意思是如果destination是一个php文件,不重写它,否则重写任何东西到destination.php?如果是这样,这应该可以工作

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !\.php$
    RewriteRule ^(.*)$ destination.php?name=$1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多