.htaccess使用漂亮的URL重定向到请求的文件名?

时间:2015-05-23 03:36:19

标签: php .htaccess

我想重定向到所请求的文件名,以便有人输入

www.example.com/user/1 

它应该重定向到user.php文件,并允许有人输入

www.example.com/apple/3www.example.com/apple哪些不存在,但它应重定向仍然重定向到苹果,它将自动提供404

我不知道如何做到这一点我发现这里的代码可以正常工作,但即使我输入苹果,也会将所有内容重定向到index.php

ErrorDocument 404 /404.php

RewriteEngine On
RewriteBase /SimpleMVCTest/

#Make sure it's not an actual file
RewriteCond %{REQUEST_FILENAME} !-f
#Make sure its not a directory
RewriteCond %{REQUEST_FILENAME} !-d 
#Rewrite the request to index.php
RewriteRule ^(.*)$ index.php?get=$1 [L]

编辑: 更多细节

可以RewriteRule ^(.*)$ index.php?get=$1 [L]是动态的,而不是index.php它从网址获取请求的一个吗?

因此,如果用户输入www.example.com/{requested URL?something=something}

然后我希望.htaccess重定向到{requested URL/something/something}并且所有动态都是动态的,如果用户键入汽车或梨或兔子/ 3它将重定向到该页面而不在{{{ 1}}喜欢htaccess我希望每件事都是动态的,就像这样rabbit.php?someting=someting

编辑2:

好好经过大量的Google / Youtube / Stackoverflow研究并将随机内容放在一起后,我终于得到了部分可以在这里工作的东西:

RewriteRule ^(.*)$ {requested URL?something=something}?get=$1 [L]

我注意到有两个问题

1:给予ErrorDocument 404 /404.php Options -MultiViews RewriteEngine On RewriteBase /SimpleMVCTest/ #Make sure it's not an actual file RewriteCond %{REQUEST_FILENAME} !-f #Make sure its not a directory RewriteCond %{REQUEST_FILENAME} !-d #Rewrite the request to REQUESTED_FILENAME RewriteRule ^(.*)$ $1.php?get=$1 [L] 将导致500内部错误,但如果我写www.example.com/car/1它可以正常工作。我怎么做它所以我可以去car / 1,它不会给500内部错误

2:如果我写www.example.com/carwww.example.com/somethingthatdoesnotexist,它会给出500内部,但应该重定向到404但是找不到

我该怎么做?

1 个答案:

答案 0 :(得分:0)

在.htaccess文件中,使用以下命令:

Options -MultiViews
RewriteEngine On

RewriteRule ^user$ user.php
RewriteRule ^user/$ user.php
RewriteRule ^user/([a-zA-Z0-9\-\_]+)$ user.php?user=$1

如果您现在使用类似个人资料/用户名的链接,则会显示用户个人资料。

它可能搞砸一些jss文件,如果它在头部使用的页面上:

<base href="/" />

这应该纠正任何css / js / image链接