【问题标题】:Htaccess code to remove id and title from URLs? [duplicate]从 URL 中删除 id 和 title 的 Htaccess 代码? [复制]
【发布时间】:2015-06-30 23:24:44
【问题描述】:

我已使用我的 .htaccess 文件将 www. 添加到索引 url,删除 .php 并从 URL 中删除 ?id=

这是原网址:

www.site.com/article.php?id=12&title=title-text

带有 .htaccess 代码的网址

www.site.com/article/12

此代码已从 url 中删除 &title=title-text

如何在没有title-text 的情况下删除&title=?像这样:

www.site.com/article/12/title-text

.htaccess 文件

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^ifeelvideos.com [NC]
RewriteRule ^(.*)$ http://www.ifeelvideos.com/$1 [L,R=301]

# To externally redirect /dir/foo.php?id=123 to /dir/foo
RewriteCond %{THE_REQUEST} ^GET\s([^.]+)\.php\?id=([^&\s]+) [NC]
RewriteRule ^ %1/%2? [R,L]

# To internally forward /dir/foo/12 to /dir/foo.php?id=12
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/([^/]+)/?$ $1.php?id=$2 [L,QSA]

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^GET\s([^.]+)\.php\s [NC]
RewriteRule ^ %1 [R,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*?)/?$ $1.php [L]

#Alternate default index pages
DirectoryIndex first.html index.htm index.html index.php

【问题讨论】:

    标签: php database apache .htaccess url


    【解决方案1】:

    我假设article.php实际上不需要标题来操作,只需要id。如果标题首先存在于 url 中,则只能将标题添加到 url。如果 title 始终在 url 中,则可以省略第二条规则。

    # To externally redirect /dir/foo.php?id=123&title=456 to /dir/123/456
    RewriteCond %{THE_REQUEST} ^GET\s([^.]+)\.php\?id=([^&]+)&title=([^&\s]+) [NC]
    RewriteRule ^ %1/%2/%3? [R,L]
    
    # To externally redirect /dir/foo.php?id=123 to /dir/123
    RewriteCond %{THE_REQUEST} ^GET\s([^.]+)\.php\?id=([^&\s]+)\s [NC]
    RewriteRule ^ %1/%2? [R,L]
    
    # To internally forward /dir/foo/12 to /dir/foo.php?id=12
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^(.+?)/([^/]+)(/[^/]+)?/?$ $1.php?id=$2 [L,QSA]
    

    此外,article.php 应该检查$_SERVER['REQUEST_URI'],如果标题不在其中则执行重定向:

    <?php
      $id = intval( $_GET['id'] );
      $title = titleById( $id );
    
      $parsedurl = explode( "/", $url );
      if( $parsedurl[3] != $title ) {
        header( "Location: http://www.example.com/article/$id/$title", true, 301 );
        exit();
      }
    

    【讨论】:

    • 非常感谢。您的代码正常工作。我希望这段代码对某人有所帮助。对于 css、js、图像,请确保使用绝对路径。
    猜你喜欢
    • 1970-01-01
    • 2015-06-28
    • 2013-02-27
    • 2016-02-21
    • 2017-08-11
    • 2015-09-09
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多