【问题标题】:rewriting versus redirecting with mod_rewrite for pretty URLs重写与重定向与 mod_rewrite 漂亮的 URL
【发布时间】:2013-04-03 01:44:58
【问题描述】:

我正在使用标准的 sn-p 将“myfile”的请求路由到“myfile.php”,使用 Apache:

# Add .php-extension to base URLS using rewrite (so links can omit it)
<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.php -f
  RewriteRule ^(.*)$ $1.php
</IfModule>

它有效。当我在浏览器中键入“mydomain.com/myfile”时,我看到页面加载,URL 栏中没有“.php”。太好了。

但现在也很清楚,我仍然可以继续在旧位置“mydomain.com/myfile.php”查看页面。还有一些问题:

1) SEO:我正在稀释链接汁,在两个 URL 之间拆分内容,一个带有“.php”,一个没有。不重要,但是嘿...

2) 世界上任何现有的指向该站点的公共链接都将继续看到未经美化的 URL。耶。

3) 最重要的是,我所有现有的内部导航链接 将继续指向未经美化的 URL。 交易破坏者。

此时我的头开始旋转。我想我想要的是将服务器上的非“.PHP”版本重写为“.PHP”,但也将带有扩展名的旧链接重定向到无扩展名的内容。是否有解决这个难题的标准“最佳实践”方式?应该通过我的导航并从链接中删除所有“.php”文件扩展名以一劳永逸地摆脱扩展名吗?似乎是错误的路径,但它有可能发生:) 更严重的是,在 LAMP 堆栈中保存没有扩展名的 PHP 文件是否安全? (我什至从未尝试过,太习惯于避免它)。如何完成向漂亮 URL 的过渡?

提前感谢您的任何指导。

【问题讨论】:

    标签: .htaccess mod-rewrite redirect friendly-url


    【解决方案1】:

    短期

    对于您所有的非漂亮链接,都有一个 RewriteRule 以重定向到其相应的漂亮链接,其中 status=301(永久重定向)。这样,搜索引擎将开始缓存您的新漂亮链接,同时逐渐丢弃所有旧的非漂亮链接。这是该部分的 .htaccess 内容:

    ## hide .php extension
    # To externally redirect /dir/foo.php to /dir/foo with 301
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
    RewriteRule ^ %1 [R=301,L]
    
    ## To internally forward /dir/foo to /dir/foo.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^(.*?)/?$ /$1.php [L]
    

    长期

    考虑使用漂亮链接转换您的内部非漂亮链接(删除\.php)。

    【讨论】:

    • 我和 Ben 有类似的困惑:我正在使用 RewriteRule ^category/subcategory/?$ Category_Index.php [NC] 之类的规则,但我不确定我是否真的以这种方式最大化了指向新 url 的链接汁。我知道我在大约一个月前实施了这些,并且许多旧网址仍然出现在 Google 中。
    • 如果你用过R=301,过段时间就好了。但是,通过清楚地描述您的问题,随时提出新问题。
    猜你喜欢
    • 1970-01-01
    • 2022-03-11
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多