2012-07-27 102 views
1

我想在我的web服务器上实现一些非常简单的事情。我希望以.php结尾的网址以/例如www.example.net/something.php结尾为www.example.net/something或www.example.net/folder/subfolder/something.php为www。 example.net/folder/subfolder/something。此外,我不介意我是否有www.example.net/folder/something.php?something=whatever/。我只关心删除网址中的最后一个.php文件。我在其他许多人中使用过这些代码。从url结尾删除.php文件扩展名。

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 
RewriteRule (.*)/$ $1.php [L] 

但是,这只适用于我的一些网页。例如,它不起作用在我的www.example.com/folder/contactus.php页面上。相反,我得到我的404页面。但它完美的工作在www.example/folder/faq.php上。 此外,我做了一些file_get_contents()php请求在我的代码的各个部分。有没有什么办法来定制这些规则,以便内部请求(我的php函数)不受影响。基本上我只想让浏览器在没有.php结尾的情况下显示url,而不会影响我在.php文件中保存的其他php函数。为了进一步澄清我的意图:我使用字符串处理函数从php文件中提取基于我设置的变量的特定行文本。但随着当前重写规则PHP文件不能我目前使用一个共享的godaddy的主机帐户Linux服务器被发现,因为扩展已经被从文件名中去除(即时猜测。

$file_contents = file_get_contents($filename); 

回答

0

我认为你需要的PHP检查适用于这两个规则:

RewriteCond %{REQUEST_URI} ^(.*)/$ 
RewriteCond %{DOCUMENT_ROOT}%1.php -f 
RewriteRule (.*)/$ $1.php [L] 

RewriteCond {REQUEST_FILENAME}.php -f 
RewriteRule .*[^/]$ $0/ [L,R=301] 

此外,-f检查需要但没有尾随到进行削减

+0

它仍然表现怪异。首先,内部的PHP脚本和函数调用保持不变。太棒了。然而,它仍然这样做 'http://www.sitename.net/folder/something.php到http:// www.sitename.net/folder/something.php' 和在同一目录中的其他文件 'http://www.sitename.net/folder/something.php到http:// www.sitename.net /文件夹/东西/' 奇怪的是,其中一个页面没有这个'http://www.sitename。 net/var/chroot/home/content/37/9179448/html/control/something'这会导致我的404页面。你上面的确切代码是我使用的原因。 – jmreader 2012-07-28 05:25:45

0

钍以下按照需要工作,虽然我的一个网页使用请求失败。我只是把它改成了发布请求,一切都很好。

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase/
RewriteCond %{THE_REQUEST} ^GET\ /([^.\ ]+\.)+php(\?[^\ ]*)?\ HTTP 
RewriteRule ^(.+)\.php$ http://www.sitename.net/$1 [R=301,L] 
RewriteRule ^([^/]+/)*index/?$ http://www.sitename.net/$1 [R=301,L] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ http://www.sitename.net/$1 [R=301,L] 
RewriteCond $1 !^([^.]+\.)+([a-z0-9]+)$ [NC] 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*[^/])$ /$1.php [L] 
RewriteRule (.*)/$ $1.php [L] 

仍然存在一个小问题。一些页面追加了斜线,而另一些则不是。任何线索强迫尾随斜线?

+0

我有一个主要问题。我所有的POST表单提交都会返回404页面。出于某种原因,我无法解决提交表单的问题。 – jmreader 2012-08-28 13:30:38