简单的mod重写,没有重复的网址。有可能的?

时间:2011-04-18 07:57:39

标签: mod-rewrite

我创建了简单的mod重写

# REMOVE WWW
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.mydomain.com$ [NC]
RewriteRule ^(.*)$ http://mydomain.com/$1 [R=301,L]


# URL REWRITE
RewriteEngine  on

RewriteRule ^design/?$ website-designing.php [L]

一切正常。我的问题是目前这两个网址都有效。如何防止这种情况?

mydomain.com/website-designing.php (my original URL)

mydomain.com/design/ (my SEO URL)

我只想要SEO URL,同样的概念应用了我这个目录中的所有文件(此目录中超过150个URL)

有可能吗?

2 个答案:

答案 0 :(得分:0)

对于每个RewriteRule ^design/?$ website-designing.php [L],您可以禁止访问相应的资源。

RewriteRule website-designing.php - [F]

或者

RewriteRule .*\.php - [F]

答案 1 :(得分:0)

我认为您无法禁止访问真正的.php文件,因为客户端应该能够显示它。

如果您使用干净的网址,我认为如果您没有在代码中注册文件名并且禁止访问目录,则搜索引擎无法找到文件名。

顺便说一句,您的搜索引擎友好重写应该如下:

RewriteRule ^design/$ /website-designing.php [L]

(任何人试图访问设计/得到服务/website-designing.php:没有重定向,所以你不会在地址栏中看到名字)。

我从未使用nosubreq [NS]标志。据说它过滤了模块生成的内部子请求。但不确定它是否适用于内部HTTP调用。 (由于您重写规则会触发新请求,因此所有规则都将被重新处理,因此您不能仅拒绝访问所有.php文件)

也许你可以试试:

RewriteRule ^.*\.php$ - [F,NS]

但不要指望很多。

我会尝试一些技巧,看看是否有效。

修改

似乎我们可以做一些事情:REDIRECT_URLREQUEST_URI似乎看起来它们在重写时得到了保护。喜欢:

RewriteCond %{REDIRECT_URL} \.php
RewriteRule ^.*$ - [F]

RewriteRule ^design/$ /website-designing.php [L]

当你在地址栏中调用.php文件时,这应该禁止任何访问。