【问题标题】:how to redirect different Multiple pages using htaccess如何使用 htaccess 重定向不同的多个页面
【发布时间】:2017-03-26 05:01:52
【问题描述】:

我成功地重定向了一个页面并且它工作正常,但是当我对其他页面做同样的事情时它不起作用。在不影响 CSS、JS、IMG 的情况下,使用 htaccess 重定向和设置 url 的最佳方法是什么?下面是我用来重定向的代码。

RewriteCond $1 ^ 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ search.php?loc=$1&q=$2 [L,QSA]


# Redirect to SEO Friendly Url search page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:search\.php)?\?loc=([^\s]+)&q=([^\s]+)? [NC]
RewriteRule ^ /%1/%2? [R=301,L]
#RewriteRule ^([^/]*)/([^/]*)$ /search.php?loc=$1&q=$2 [L]

我的网址是

https://www.zesteve.com/search.php?loc=Guntur&q=manjunath-cake-shop

成功改成

https://www.zesteve.com/Guntur/manjunath-cake-shop

我不希望我的网址显示页面名称search.php

现在我正在尝试更改以下网址

https://www.zesteve.com/vendor.php?city=Hyderabad&type=bakers-and-confectioners&vname=manjunath-cake-shop&vid=87411490256961

https://www.zesteve.com/Hyderabad/bakers-and-confectioners/manjunath-cake-shop/87411490256961

下面的代码

# Redirect to SEO Friendly Url Vendor page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:vendor\.php)?\?city=([^\s]+)&type=([^\s]+)&vname=([^\s]+)&vid=([^\s]+)? [NC]
RewriteRule ^ /%1/%2/%3/%4? [R=301,L]

RewriteCond $1 ^ 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ vendor.php?city=$1&type=$2&vname=$3&vid=$4 [L,QSA]

它不工作我做得对吗?

如果有不懂的请留言

【问题讨论】:

    标签: php apache .htaccess redirect


    【解决方案1】:

    在您的最后一个重写规则中,您只捕获一个值,但在您的目标中使用 $1,$2,$3,$4

    把你的规则改成这样:

    # Redirect to SEO Friendly Url Vendor page
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:vendor\.php)?\?city=([^\s&]*)&type=([^\s&]*)&vname=([^\s&]*)&vid=([^\s&]*) [NC]
    RewriteRule ^ /%1/%2/%3/%4? [R=301,NE,L]
    
    # Redirect to SEO Friendly Url search page
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(?:search\.php)?\?loc=([^\s&]*)&q=([^\s&]*)\s [NC]
    RewriteRule ^ /%1/%2? [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    
    RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/([\w-]+)/?$ vendor.php?city=$1&type=$2&vname=$3&vid=$4 [L,QSA]
    
    RewriteRule ^([\w-]+)/([\w-]+)/?$ /search.php?loc=$1&q=$2 [L,QSA]
    

    【讨论】:

    • 没有改变它指向上一页。 URL 已更改,但 vendor.php 未加载。
    • 这是因为我在模式中有一个斜杠,应该是可选的。我用完整的 .htaccess 更新了我的答案,以便您仅按此顺序保留规则。
    • 只对 2 个 url 有效,或者如果我想对另一个 url 做同样的事情,我应该改变什么 RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] 这部分对我来说是新的。
    • 以上规则集适用于 vendor.php,有 4 个参数和 2 个参数。如果您需要支持,例如3 个参数然后添加 2 个类似(一个 R=301,另一个具有内部重写)规则
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多