重写与使用mod_rewrite重定向漂亮的URL

时间:2013-04-02 01:24:30

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

我正在使用标准代码段将“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)搜索引擎优化:我正在稀释链接汁,在两个URL之间分割内容,一个用“.php”,一个没有。不重要,但嘿......

2)世界上任何现有的网站公开链接都会继续看到未经批准的网址。 Yech。

3)最重要的是,我现有的所有内部导航链接     将继续指向未经批准的URL。 因素在于

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

提前感谢任何指导。

1 个答案:

答案 0 :(得分: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)。