2013-01-15 55 views
0

是的,我知道这已被问了数百次。但我找不到实际可行的版本。目前,我目前使用的所有功能目前都在删除.php,但那是问题出现的时间。我网站上的几个页面取决于$_GET请求,例如profile因此,当您访问url http://www.example.com/profile?username=System时,您将获得404,而没有?username=System,则可以正常工作。当前的代码我已经是删除网址中的后缀

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 
+0

你有你的Al lowOrverride设置为全部?在xammp和http-conf中?还把选项索引FollowSymLinks包括ExecCGI在你的http.conf –

+0

这是托管在远程服务器上,所以我不知道,但在我决定改变页面系统之前,重写像这样工作得很好。但是,然后页面由index.php完成?page = profile&username = System – ChocCookieRaider

+0

由于规则集中的条件不匹配,显然没有文件夹'http://www.example.com/ profile?username = System'但是,哪个脚本应该获取传入URL中传递的参数。即'username = System',名为'profile'的脚本(profile.php)或另一个不在URL中的名称,如'index.php'? –

回答

2

你需要[QSA](查询字符串附后)在你重写规则的结尾。

RewriteRule ^(.*)$ $1.php [QSA] 
+0

刚试过这个,遗憾的是没有效果。不过谢谢。 – ChocCookieRaider

+1

没有查询**追加**,因此该标志什么也不做。 –

+0

@faa在URL http://www.example.com/profile?username = System中,肯定有一个要包含的查询。 – ceejayoz

1

你可以试试这个:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{QUERY_STRING} .  [NC] 
RewriteCond %{REQUEST_URI} ^/([^/]+) [NC] 
RewriteRule .* %1.php    [L] 

将映射默默地这个

http://www.example.com/ScriptName?key1=val1

要:

http://www.example.com/ScriptName.php?key1=val1

+0

完美工作,除了一个小问题。当没有查询访问页面时,会出现404错误。 – ChocCookieRaider

+0

这就是预期的行为,因此'RewriteCond%{QUERY_STRING}。 [NC]',因为我假定页面“http:// www.example.com/ScriptName”,例如,不存在。但是,如果您仍然希望将该页面映射到带有名称的脚本,而无需查询,则只需从该组规则中删除该行即可。 –