我创建了简单的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)
有可能吗?
答案 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_URL
或REQUEST_URI
似乎看起来它们在重写时得到了保护。喜欢:
RewriteCond %{REDIRECT_URL} \.php
RewriteRule ^.*$ - [F]
RewriteRule ^design/$ /website-designing.php [L]
当你在地址栏中调用.php文件时,这应该禁止任何访问。