2017-08-11 97 views
0

我有一个网站设置,用户可以声称“/页”,如
mywebsite.com/example1或mywebsite.com/example2。重定向如果URL只包含字母或数字

如果用户键入一个不存在的URL,它显然会重定向到一个404错误页面。但是,我希望如果用户输入一个不存在的包含的网址只是字母或数字(无符号或类似),然后,它将被重定向到我创建的页面,指出“url available!”。 。

我配置了一个这样的.shtml页面,以便输入一个有效的URL时,它显示了这一点:

<h1>available</h1>  
<div>mywebsite.com<!--#echo var="REQUEST_URI" --> is available.</div> 

example1 example2

不过,我不知道如何设置了“有效性“部分。我希望它只显示这个页面,如果输入的URL只包含数字或字母,没有符号。换句话说,

mywebsite.com/@user goes to 404 error page 
mywebsite.com/u$er goes to 404 error page 
mywebsite.com/user_ goes to 404 error page 
mywebsite.com/user redirects to my custom page 
mywebsite.com/user123 redirects to my custom page 
mywebsite.com/123 redirects to my custom page 

我现在有它设置在404错误页面是一个指出“mywebsite.com /(...)可用”,但是这会导致问题,因为它会说几乎任何东西都可用。我曾尝试使用RewriteRule ^(.*);(.*)$ /error.shtml [L,R=301]阻止某些字符,其中每个RewriteRule检测url是否包含另一个符号,并将301重定向到我的自定义错误页面。但是,此代码不能重定向所有符号,例如,如果我把RewriteRule ^(.*)$(.*)$ /error.shtml [L,R=301]重定向到URL中美元符号的任何用途,它会给我一个服务器错误,因为“$”是保留字符。 (除非有我不知道的解决方法)!所以我反而采用这种方法,而不是阻止符号,只是只有允许字母和数字。

非常感谢帮助!需要!

回答

1

使用下列规则.htaccess文件:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^[a-zA-Z0-9\._]+$ custom.page [L] 

如果某样东西存在,被担任了正常。如果它不存在,并且当前目录的请求uri部分只包含字母数字字符,它会转到custom.page。如果它包含其他内容,则会进入默认的404页面。

+0

完美的作品!非常感谢! – Cris

+0

Hi @Peter有没有方法可以包含句点和下划线? – Cris

+0

@Cris是的,现在它也可以使用句点和下划线 –

1

这是我会怎么做:

#If there is no file match 
RewriteCond %{REQUEST_FILENAME} !-f 
#Or a directory match 
RewriteCond %{REQUEST_FILENAME} !-d 
#Redirect alphanumeric strings to your custom page 
RewriteRule ^[a-zA-Z0-9_.]+$ /my/custom/page [R=301,L] 
#If there are symbols, send to 404 
RewriteRule .* /error.shtml [R=301,L] 
+0

我测试了一下,它也可以工作,但它是否执行Peter的代码没有的任何操作? – Cris

+0

我们在同一时间发布。所以选一个! –

+0

我做到了。谢谢您的回复! – Cris

相关问题