301使用HTACCESS或PHP进行URL转发

时间:2012-12-08 01:14:54

标签: mod-rewrite

只是好奇是否有人可以帮助我解决这个HTACCESS问题。

我有这些需要正确转发的旧网址。

以前的结构

domain.com/Canada/Accounting

domain.com/Canada/Trades

domain.com/Canada/Sales

正确的结构

CATEGORY - / jobs / accounting-jobs

位置 - / jobs / jobs-kelowna

TOGETHER - / jobs / accounting-jobs-kelowna

域名结构

domain.com/jobs/ [类别] -jobs- [位置]

这是可能的,无论是通过HTACCES还是PHP ...只是不想要这些404的页面。 我有86+要做,如果有一个很好的方法来转发这些。 这就是我所拥有的,但我无法成功地正确转发坏网址。

OLD

/browse
/Toronto/
/Canada/Administrative
/Vancouver/
/Canada/Trades
/Calgary/
/Canada/Hospitality

这是我现在的HTACCESS。

Options +FollowSymlinks

    RewriteEngine on
    RewriteBase /

    #
    # Trailing slash check
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
    RewriteRule ^(.*)$ $1/ [L,R=301]


    #
    # PAGES
    RewriteRule ^add-job/?$     /add-job.php [L]
    RewriteRule ^jobs/?$        /results.php [L]
    RewriteRule ^sitemap/?$     /sitemap.php [L]

    #
    # SEARCH
    # CATEGORY - accounting-jobs
    # LOCATION -            jobs-kelowna
    # TOGETHER - accounting-jobs-kelowna
    RewriteRule ^jobs/([a-zA-Z0-9_-]+)/([0-9]+)?$    results.php?whatwhere=$1&page=$2
    RewriteRule ^jobs/([a-zA-Z0-9_-]+)/([0-9]+)/?$   results.php?whatwhere=$1&page=$2

2 个答案:

答案 0 :(得分:1)

如果您有mod_rewrite,则可以将这些行添加到.htaccess文件中:

RewriteEngine on
RewriteRule ^Canada/Accounting$ /jobs/accounting-jobs [R,L]

但是,您的问题并不清楚您想要映射的内容。以前的3个URL是否应该重定向到3个新的URL?它们似乎不相同。

答案 1 :(得分:1)

要301重定向您的网页,您可以执行以下操作:

RewriteEngine On
RewriteBase /

RewriteRule ^(\w+)/(\w+)$ /jobs/$2-jobs-$1 [R=301,L]

这只会解决您之前结构中的网址(这些组合,您之前没有显示任何位置或类别的网址),但请注意Canada将保留Canada,但不会{ {1}}。您也可以使用重写将所有内容更改为小写。

您还必须注意不要重写任何当前网址,但如果没有更多信息,则应该这样做。

修改:对于仅限位置的网址,您可以使用以下规则:

canada

同样,您需要注意您的重写规则不会干扰您当前的网址。如果是这种情况,您需要手动重定向每个旧网址。

对于小写的新网址,您应该搜索SO,有一些问题可以很好地解答将mized-case变量转换为小写的问题。