.htaccess在活动服务器上导致无限循环,但在localhost上工作

时间:2015-09-04 03:41:26

标签: php regex .htaccess

我是新手.htaccess和正则表达式。我有一个在本地工作的脚本,但是当我将它上传到实时服务器时,它会导致无限循环。我怎样才能解决这个问题?在您加载http://example.com的网站上,如果您未经身份验证,则会转到http://example.com/auth/登录表单,否则会显示http:///example.com/index.php的内容。它在本地工作正常,但是当我在实时服务器上传时,它找不到auth.php,因此它重定向到索引页面,并且由于用户未经过身份验证,因此会向auth.php发送无限循环。请帮忙。感谢。

这是我的档案

Options -Indexes
Options -MultiViews    
Options +FollowSymLinks

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /     

   # remove php extensions (only for GET method)
   RewriteCond %{THE_REQUEST} ^GET\ /(.+)\.php(?:\?|\s) [NC]
   RewriteCond %{REQUEST_FILENAME} -f
   RewriteRule ^ %1/? [L,R=301]

   # don't touch other existing files/folders
   RewriteCond %{REQUEST_FILENAME} -f [OR]
   RewriteCond %{REQUEST_FILENAME} -d
   RewriteRule ^ - [L]

   # force trailing slash
   RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
   RewriteRule ^(.+)$ $1/ [L,R=301] 

   # rewrite extensionless php files
   RewriteCond %{DOCUMENT_ROOT}/$1.php -f
   RewriteRule ^(.+)/$ $1.php [L]

   #rewrite path to file eg http://example.com/auth/recover to http://example.com/auth.php?a=recover
   RewriteCond %{DOCUMENT_ROOT}/$1.php -f
   RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?a=$2 [QSA,L]

   RewriteCond %{DOCUMENT_ROOT}/$1.php -f
   RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1.php?a=$2&id=$3 [QSA,L]

   # finally, if not found
   RewriteRule ^ index.php [L]
</IfModule>

2 个答案:

答案 0 :(得分:1)

在谷歌搜索和阅读,尝试和测试后,我找到了解决godaddy有趣的.htaccess问题的方法。我在这里解决了。

https://serverfault.com/questions/720085/htaccess-causes-infinite-loop-on-live-server-but-works-on-localhost/

答案 1 :(得分:0)

您可以重新排序规则:

r = requests.post(main_url, data=login, allow_redirects=false)