我正试图在我的web服务器上实现一些非常简单的东西。我希望以文件夹结尾的urls是www.example.net/ .php,或者urls是www.example.net/.php/subfolder/。另外,如果我有www.example.net/folder/something.php?something=whatever/.,我不介意我只关心如何删除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文件,因为扩展名已从文件名中删除(即时猜测。
$file_contents = file_get_contents($filename);我目前使用的是一个共享的godaddy主机帐户上的linux服务器。
发布于 2012-07-28 06:25:06
我认为您需要对这两个规则应用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检查
发布于 2012-07-28 23:59:58
尽管我的其中一个页面使用了失败的get请求,但下面的代码工作正常。我只是将其更改为post请求,一切都很好。
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]还有一个小问题仍然存在。有些页面会附加尾部斜杠,而其他页面则不会。有关于强制使用尾部斜杠的线索吗?
https://stackoverflow.com/questions/11691916
复制相似问题