Linux 软件免费装

Plugin Name

开发者
更新时间 2009年8月18日 03:27
PHP版本: 2.0.0 及以上
WordPress版本: 2.6

标签

redirect 301 404 seo permalink url htaccess canonical iis wp_rewrite_rules isapi isapi_rewrite rewriterule mod_rewrite www

下载

0.6 0.7 0.8 0.1 0.2 0.3 0.4 0.5

详情介绍:

Wordpress 2.3 now includes validation of the permalink URL when using Apache web server, but if using IIS then this plugin is still relevant. Permalink Validator helps Search Engine Optimization (SEO) as it prevents duplicate contents on your Wordpress blog: Wordpress it very forgiving when supplying an URL that doesn't match the actual permalink to a post or a page. This is caused by Wordpress using some very greedy wp_rewrite_rules, which accepts almost any URL as valid. This means that multiple URLs could be used to reach the page, which search engines sees a duplicate content and leads to penalty. For example it will accept the following permalink URL as valid:
http://example.com/post/hello-world/2
Even though the official URL is this:
http://example.com/post/hello-world/
Permalink Validator makes a hook to template_redirect, and then adds some extra validation of the URL supplied before actually calling the theme-templates.

安装:

  1. Upload permalink-validator.php to the /wp-content/plugins/ directory
  2. Activate the plugin through the 'Plugins' menu in WordPress

常见问题:

Why should I use this instead of htaccess or isapi_rewrite ?

If having the ability to use htaccess or isapi_rewrite, then one should continue to use these to add missing trailing back-slash or www prefix. They are a lot faster at redirecting than Permalink Validator, as they are activated without starting the PHP script engine when the URL has incorrect format. Permalink Validator extends the validation so besides checking the format, then it also checks that the url is referring to something valid. The validation of the url doesn't generate any extra overhead in database queries (unless the url requires redirection).

Why does it redirect continously when activating the plugin ?

The plugin makes a redirect when the url used to reach the page doesn't match the expected permalink url. Some times this leads to an endless loop, which Firefox shows as:

The page isn't redirecting properly Firefox has detected that the server is redirecting the request for this address in a way that will never complete. * This problem can sometimes be caused by disabling or refusing to accept cookies.
This can be caused by a conflict in the htaccess / isapi_rewrite redirection rules and the given permalink structure:
  • If enforcing trailing back-slash and the permalink structure doesn't include it.
If this is not the case then you are very welcome to post a topic with your problem as feedback to this plugin. Please include your permalink-structure and Wordpress version in your description of the problem.

How to exclude pages from being permalink validated ?

The Permalink Validator will pretty much validate any URL you throw at it, but sometimes there are URL's that should not be validated. Edit the plugin-code and replace this line:

$excludes = array();
With an array of the URL's to ignore:
$excludes = array("/forum");
Plugins that requires an URL excluded:

How to block search engines from spidering Wordpress feed and trackback ?

Add the following lines to your robots.txt:

Disallow: */feed Disallow: */atom Disallow: */rss2 Disallow: */rss Disallow: */trackback Disallow: /*/feed Disallow: /*/atom Disallow: /*/rss2 Disallow: /*/rss Disallow: /*/trackback

How to make proper permalink URL's in IIS ?

Wordpress supports by default Apache htaccess and its mod_rewrite rules. When using Wordpress on IIS then these will not work and one is limited to this type of permalink:

http://example.com/index.php/post/hello-world/
To remove the index.php, then one can either use the custom 404 redirects or isapi_rewrite. If using isapi_rewrite and changing from using index.php to not using index.php, then one can use the following httpd.ini (Assumes Wordpress is installed in the root):
[ISAPI_Rewrite] # Rules to ensure that normal content gets through RewriteRule /software-files/(.*) /software-files/$1 [L] RewriteRule /images/(.*) /images/$1 [L] RewriteRule /favicon.ico /favicon.ico [L] RewriteRule /robots.txt /robots.txt [L] # For file-based wordpress content (i.e. theme), admin, etc. RewriteRule /wp-(.*) /wp-$1 [L] # Rule to perform 301 redirect to ensure trailing back-slash on post and pages RewriteCond Host: (.*) RewriteRule ([^.?]+[^.?/]) http\://$1$2/ [I,R] # Rule to perform 301 redirect (Remove index.php if specified) RewriteRule /index.php/(.*) /$1 [I,RP] # For normal wordpress content, via index.php RewriteRule ^/$ /index.php [L] RewriteRule /(.*) /index.php/$1 [L]

Why doesn't it redirect on IIS when the URL is wrong ?

Permalink Validator cannot see the difference between this url:

http://example.com/
And this url on IIS:
http://example.com/index.php
It can also not see the difference between this url:
http://example.com/
And this url on IIS:
http://example.com/////
This is because REQUEST_URI is not supported properly on IIS, and this plugin can only simulate REQUEST_URI to a certain limit. Therefore it is impossible to know whether index.php or extra slashes was specified or not. The solution is to use a rewrite engine like ISAPI_rewrite or IIS mod-rewrite as they can provide a proper REQUEST_URI.

Why does a non existing page give HTTP error 200 on IIS ?

Microsoft IIS fails to reply with error code 404 in the HTTP header, when trying to access an non existing Wordpress page. This usually happens when using a custom 404 page on IIS. It seems that when using PHP on IIS, then it is not possible to reply with a proper HTTP header. Apparently the only way to return a proper 404 on IIS is to use ASP.

Will Google tracking code work with this plugin ?

Google tracking code adds a question-mark (?) option to the URL, which the Permalink Validator will strip because it is not part of the permalink URL. Instead of using a question-mark (?), then one could use a hash (#) value, and then modify the Google tracking code to extract the hash value instead of the question-mark value.